使用Gradle运行特定的仪器单元测试

时间:2013-10-24 12:23:22

标签: android unit-testing gradle

有没有办法使用Gradle运行特定的Android检测单元测试?我试过了

gradle -Dtest.single=UnitTestName connectedInstrumentTest

但它似乎在包中运行所有测试。

7 个答案:

答案 0 :(得分:22)

似乎不推荐使用test.single。新的正确方法是

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

<pattern>可能是这样的:

  • com.example.MyTest在com.example.MyTest
  • 中运行所有测试方法
  • *MyTest匹配名称以MyTest
  • 结尾的每个类中的每个方法
  • *.MyTest.myMethod在任何包
  • 中的MyTest类中运行特定的测试方法

如果您有多项目构建,请确保在test任务之前提供模块路径;否则,当您在每个子项目中搜索测试模式时,您将收到误导性的错误消息。

Gradle网站上任何我都找不到的内容都没有记录。

答案 1 :(得分:20)

模式为-D<testTaskName>.single=<TestClass>,因此在您的示例中应该是:

gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest
  

注意:此答案已过时。您应该使用最新版Gradle中的--tests开关。 (参见其他答案的解释)

答案 2 :(得分:15)

如果您使用的是instrumentationTestRunner

,则此功能正常
./gradlew test -Pandroid.testInstrumentationRunnerArguments.class='<pkg>.YourClassName'

使用gradle 2.10和android gradle插件2.0.0-beta2。

由于您知道要运行哪些测试,因此您可能知道要使用哪个模块/风格。您可以通过指定确切的模块和Gradle任务来帮助Gradle out。因此,如果您的测试位于app模块中,并且您想测试debug风格:

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

答案 3 :(得分:6)

由于Android gradle插件1.1.0-rc1,可以通过执行以下命令运行--tests标志来运行单个测试类:

./gradlew testDebug --tests=com.example.MyTest

请参阅http://tools.android.com/tech-docs/unit-testing-support#TOC-Running-from-Gradle

答案 4 :(得分:1)

你得检查一下。

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

我在这个github存储库中遇到了一个问题,这个人解决了我的问题并上传到了maven,所以在我的build.gradle文件中我使用了这个插件。

说明书写在他的资料库中。你可以轻松地遵循它。

使用这个android-unit-test插件后,我可以使用

../gradlew -Dtest.single=SomeTest test 

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

现在它正在运行,我只能运行我想要的特定测试

答案 5 :(得分:0)

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();
        }
    }
    //...
}

答案 6 :(得分:0)

Gradle命令对我不起作用。 我在下面使用了改进的adb命令。 为此,您需要先构建apk。

仪器的adb外壳-w -r -e软件包-e debug false .debug.test / android.support.test.runner.AndroidJUnitRunner