Получение junit.framework.AssertionFailedError: Тесты не найдены в [package] при использовании Unit и Mockito
Я добавил следующие зависимости в мой проект Android:
// Unit testing dependencies
androidTestCompile 'junit:junit:4.12'
// Set this dependency if you want to use Mockito
androidTestCompile 'org.mockito:mockito-core:1.10.19'
И создайте тест, используя junit4 api (например, Adder - простой класс с суммой целых чисел):
@RunWith(MockitoJUnitRunner.class)
public class AdderTest {
@Test
public void testValidAdd() {
Adder adder = new Adder();
assertEquals(adder.add(1,1), 2);
}
}
Когда я пытаюсь запустить тест, я получаю:
Запуск тестов Запуск тестов запущен junit.framework.AssertionFailedError: Тесты не найдены в com.test.myapp.AdderTest на android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) на android.test.AndroidTestRunner.runTest (AndroidTestRunner. 176) на android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) на android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701) Готово
Я читаю здесь и здесь, но ничего не помогает.
Кто-нибудь видит, что я делаю не так / есть какие-то отзывы?
2 ответа
Это не модульные тесты, это тестирование оборудования. У меня была та же проблема, и я решил ее, добавив следующие строки в build.gradle модуля:
android {
...
sourceSets {
...
defaultConfig {
testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
}
}
}
Вы должны добавить бегуна в зависимости, я предлагаю вам эспрессо:
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
РЕДАКТИРОВАТЬ:
Я забыл об аннотации. Просто удалите @RunWith и создайте метод @Before со строкой:
MockitoAnnotations.initMocks(this);
или же:
System.setProperty("dexmaker.dexcache", InstrumentationRegistry.getTargetContext().getCacheDir().getPath());
Я должен упомянуть, что этот способ не рекомендуется. Чтобы использовать второй, вы должны добавить зависимости с dex-maker для mockito:
androidTestCompile ('com.google.dexmaker:dexmaker-mockito:1.2') {
exclude module: 'mockito-core'
}
Поскольку вы добавили mockito, мы должны исключить ядро mockito из новой зависимости. Он уже содержит обычный модуль dex-maker.
Вы используете тест Android Instrumentation Test. По умолчанию тестер Android не запускается на JUnit4, он запускается на JUnit3 с использованием подклассов InstrumentationTestCase.
Вам нужно будет вернуться к ручным вызовам MockitoAnnotations.initMocks()
с необязательным Mockito.validateMockitoUsage()
, Конечно же, звонки напрямую на Mockito.mock
(и такое) все равно будет работать.
В качестве альтернативы есть официальный бегун JUnit4, который можно установить из тестовой библиотеки поддержки Android. Вызывая этот инструментарий, а не средство запуска тестов по умолчанию, вы можете запускать тесты JUnit4 на своем устройстве, включая использование MockitoJUnitRunner
или же MockitoRule
,