Я пытаюсь добавить простой инструментальный тест в мое приложение. Приложение до сих пор не перенесено в библиотеки androidx, поэтому оно все еще использует библиотеки поддержки.
Я добавил эти инструменты, связанные с библиотеками поддержки, для тестирования:
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test:rules:0.4.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestImplementation ('com.android.support.test.espresso:espresso-contrib:3.0.2'){
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'support-v4'
exclude module: 'recyclerview-v7'
}
androidTestUtil 'com.android.support.test:orchestrator:1.0.2'
androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'
Также я указал бегуна:
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
Мой простой инструментальный тест выглядит следующим образом:
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun testUseAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
Assert.assertEquals("com.mycompany.myapp", appContext.packageName)
}
}
Вот то, что я вижу в журналах, когда запускаю его (нажав на зеленый треугольник «play» слева от имя класса):
Testing started at 12:37 PM ...
04/27 12:37:41: Launching 'ExampleInstrumentedT...' on samsung SM-G920F.
Running tests
$ adb shell CLASSPATH=$(pm path android.support.test.services) app_process / android.support.test.services.shellexecutor.ShellMain am instrument -r -w -e targetInstrumentation com.mycompany.myapp.test/android.support.test.runner.AndroidJUnitRunner -e debug false -e class 'com.mycompany.myapp.ExampleInstrumentedTest' android.support.test.orchestrator/android.support.test.orchestrator.AndroidTestOrchestrator
Started running tests
Tests ran to completion.
Кажется, все в порядке, но также я вижу красную метку "Тесты не найдены" И если я изменю ожидаемое значение с "com.mycompany.myapp "к чему-то другому и снова запустите тест, он выдаст мне тот же журнал, так что, очевидно, он не работает.
Я посмотрел в лабораториях Google Code о тестировании здесь Он использует androidx в его код и упомянутый выше простой тест прекрасно работает. Вот что я вижу в журналах:
Testing started at 12:44 PM ...
04/27 12:44:34: Launching 'ExampleInstrumentedT...' on samsung SM-G920F.
Running tests
$ adb shell am instrument -w -r -e debug false -e class 'com.example.android.architecture.blueprints.todoapp.ExampleInstrumentedTest' com.example.android.architecture.blueprints.reactive.test/androidx.test.runner.AndroidJUnitRunner
Connected to process 8930 on device 'samsung-sm_g920f-081608e304c73302'.
Started running tests
Tests ran to completion.
Вот как это выглядит на вкладке «Выполнить» в IDE:
Не могли бы вы мне чем-нибудь помочь? причина root моей проблемы? Может ли это быть из-за использования старых вещей, связанных с поддержкой libs, вместо использования androidx? Могу ли я каким-то образом запустить инструментальный тест с использованием средств поддержки lib?
PS Я также попробовал эту команду gradle:
./gradlew connected<myBuildVariand>AndroidTest
И это приводит к тому же результату, тесты не найдены:
com.android.builder.testing.ConnectedDevice > No tests found.[SM-G920F - 7.0] FAILED
No tests found. This usually means that your test classes are not in the form that your test runner expects (e.g. don't inherit from TestCase or lack @Test annotations).