Получение 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,

Другие вопросы по тегам