Подтвердить что ты не робот

Выполнение конкретного тестового блока с Gradle

Есть ли способ запустить определенный тестовый модуль Android с помощью Gradle? я пробовал

gradle -Dtest.single=UnitTestName connectedInstrumentTest

но, похоже, запустить все тесты в пакете.

4b9b3361

Ответ 1

Использование test.single кажется устаревшим. Новый правильный способ сделать это:

./gradlew :<module>:test --tests <pattern>

где <pattern> может быть что-то вроде:

  • com.example.MyTest для запуска всех методов тестирования в com.example.MyTest
  • *MyTest, чтобы соответствовать каждому методу в каждом классе, чье имя заканчивается MyTest
  • *.MyTest.myMethod для запуска определенного тестового метода в классе MyTest в любом пакете

Если у вас многопроектная сборка, не забудьте указать путь к модулю перед задачей test; в противном случае вы получите ошибочное сообщение об ошибке при поиске тестового шаблона в каждом подпроекте.

Ничего из этого не зарегистрировано на сайте Gradle где бы я ни находил.

Ответ 2

Образец -D<testTaskName>.single=<TestClass>, поэтому в вашем примере это должно быть:

gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest

ПРИМЕЧАНИЕ. Этот ответ устарел. Вы должны использовать переключатель --tests в последних версиях Gradle. (см. другие ответы для объяснения)

Ответ 3

Это работает, если вы используете instrumentationTestRunner:

./gradlew test -Pandroid.testInstrumentationRunnerArguments.class='<pkg>.YourClassName'

Использование Gradle 2.10 и Android Gradle плагин 2.0.0-бета2.

Поскольку вы знаете, какой тест вы хотите выполнить, вы, вероятно, знаете, какой модуль/разновидность тоже использовать. Вы можете помочь Gradle, указав точный модуль и задачу Gradle. Итак, если ваш тест находится в модуле app и вы хотите протестировать debug версию:

./gradlew app:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class='<pkg>.YourClassName'

Ответ 5

Вы должны это проверить.

https://github.com/JCAndKSolutions/android-unit-test

Я сделал проблему в этом репозитории github, и этот парень решил мою проблему и загрузил в maven, поэтому в моем файле build.gradle я использую этот плагин.

Инструкции написаны в его репозитории. вы можете легко следовать за ним.

После использования этого модуля plug-and-unit-test, я могу использовать как

../gradlew -Dtest.single=SomeTest test 

или

../gradlew -Dtest.single=SomeTest clean check

Теперь он работает, и я могу запускать только те тесты, которые я хочу

Ответ 6

Ответ Erdi не работал у меня, но у меня есть один родитель для всех моих тестовых классов, поэтому я смог это сделать:

public abstract class BaseEspressoTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
    //...
    @Override
    protected void runTest() throws Throwable {
        if(getClass().getSimpleName().equals("MyTestClassName")) {
            super.runTest();
        }
    }
    //...
}

Выполняется только MyTestClassName. Мы можем расширить его, чтобы выполнить только конкретный метод тестирования (или методы):

public abstract class BaseEspressoTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
    //...
    @Override
    protected void runTest() throws Throwable {
        if("MyTestClassName".equals(getClass().getSimpleName()) 
           && "testMethodName".equals(getName())) {
            super.runTest();
        }
    }
    //...
}

Ответ 7

Нельзя забывать указать имя варианта сборки после объявления свойства test, например

-Dtest<buildVariantName>=<yourTestName>.

Подобно, если у вас есть тип сборки debug, который дает вам вариант debug после компиляции, то если вы хотите запустить тест только для этого варианта сборки, вы должны объявить команду следующим образом:

./gradlew -DtestDebug=UnitTestName testDebug

Ответ 8

команда Gradle у меня не работает. Я использовал нижеприведенную команду adb. для этого вам нужно сначала собрать свой apk.

adb shell am tool -w -r -e пакет -e отладка false.debug.test/android.support.test.runner.AndroidJUnitRunner