Ich habe ein Problem mit meinem Android-Test.
Hier ist mein Setup in Gradle:
apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
apply plugin: 'kotlin-kapt'
Android {
compileSdkVersion 26
defaultConfig {
applicationId "com.blabla.shoppinglistapp"
minSdkVersion 17
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
ext.daggerVersion = '2.11'
ext.roomVersion = '1.0.0'
ext.mockitoVersion = '2.11.0'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.Android.support:appcompat-v7:26.1.0'
implementation 'com.Android.support.constraint:constraint-layout:1.0.2'
implementation 'com.Android.support:design:26.1.0'
implementation 'com.Android.support:recyclerview-v7:26.1.0'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-Android:2.8.47'
androidTestImplementation 'com.Android.support.test:runner:1.0.1'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.1'
// ViewModel and LiveData
implementation "Android.Arch.lifecycle:extensions:1.0.0"
annotationProcessor "Android.Arch.lifecycle:compiler:1.0.0"
// RxJava
implementation 'io.reactivex.rxjava2:rxjava:2.1.5'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
// Room
implementation "Android.Arch.persistence.room:runtime:$roomVersion"
implementation "Android.Arch.persistence.room:rxjava2:$roomVersion"
kapt "Android.Arch.persistence.room:compiler:$roomVersion"
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.2.10"
androidTestImplementation "Android.Arch.persistence.room:testing:$roomVersion"
// Gson
implementation 'com.google.code.gson:gson:2.8.2'
}
Und hier ist der Test (fast nichts hier):
@RunWith(AndroidJUnit4::class)
class ShoppingListDaoTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getTargetContext()
assertEquals("com.blabla.shoppinglistapp", appContext.packageName)
}
private lateinit var database: ShoppingListDatabase
@Before
fun initDb() {
// using an in-memory database because the information stored here disappears after test
database = Room.inMemoryDatabaseBuilder(InstrumentationRegistry.getContext(),
ShoppingListDatabase::class.Java)
// allowing main thread queries, just for testing
.allowMainThreadQueries()
.build()
}
@After
fun closeDb() {
database.close()
}
@Test fun testGetActiveShoppingListWhenNoActiveShoppingListInserted() {
database.shoppingListDao().getActiveShoppingLists()
.test()
.assertNoValues()
}
}
Wenn ich versuche, den Test auszuführen, bekomme ich Folgendes:
Der Vorgang wurde mit dem Exitcode 1 .__ abgeschlossen. Klasse nicht gefunden: "com.blabla.shoppinglistapp.ShoppingListDaoTest" Leere Testsuite.
Und es fängt nicht an
UPDATE
Ich habe eine wirklich schlimme Sache bemerkt ... Wenn ich ein neues Projekt in Android Studio gestartet habe und versuche, den Standard-Android-Test auszuführen, wird mir ein bekannter Fehler angezeigt:
Fehler: Gradle: Java.util.concurrent.ExecutionException: Java.util.concurrent.ExecutionException: com.Android.tools.aapt2.Aapt2Exception: AAPT2-Fehler: Überprüfen Sie die Protokolle auf Details
Der Workround dafür besteht darin, diese Zeile zu gradle.properties hinzuzufügen:
Android.enableAapt2 = false
Dies sind die Schritte, die ich zuvor in meinem ursprünglichen Projekt ausgeführt habe (ich bin auch auf diesen Fehler gestoßen) .. Leider gibt es mir danach den Fehler aus meiner Frage ... Also ist es wirklich die Frage, wie um die isse mit dem aapt2 zu lösen, damit dies funktioniert .. __ Siehe auch hier: AAPT2-Fehler: Logs auf Details überprüfen, nach dem Workround funktioniert der androidTest nicht
Irgendeine Idee?
Ich hatte auch das gleiche Problem. Bei jedem Versuch, die einzelnen Test- oder Testklassen auszuführen, wurde der Fehler "Empty Test Suite" angezeigt. Es scheint, dass dies ein Fehler in Android Studio ist.
Klicken Sie stattdessen mit der rechten Maustaste auf das Paket androidTest
und klicken Sie auf "Tests ausführen in ...". Nur so kann ich es schaffen.
Höflichkeit: Die Codelab-Jungs
UPDATE:
Dies ist in der Android Studio 3.1
-Version behoben. Sogar der gradlew connectedDebugAndroidTest
issue ist jetzt behoben.
Ich hatte das gleiche Problem. In meinem Fall löste das Problem das Verschieben meiner Testklasse (DaoTest-Klasse) in das gleiche Paket wie das von Android Studio erstellte StandardbeispielInstrumentedTest.
Ich hatte diese Projektstruktur vorher:
Und geändert zu sein:
Danach konnte ich alle Tests in der Klasse ohne Probleme ausführen.