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

问题描述 投票:38回答:8

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

gradle -Dtest.single=UnitTestName connectedInstrumentTest

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

android unit-testing gradle
8个回答
22
投票

使用test.single似乎已被弃用。这样做的新正确方法是

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

其中<pattern>可能是这样的:

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

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

Gradle站点上的任何内容都没有记录在我能找到的地方。


20
投票

模式是-D<testTaskName>.single=<TestClass>所以在你的例子中它应该是:

gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest

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


16
投票

如果你使用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'

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


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

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


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

0
投票

您不应忘记在test属性声明之后指定构建变体名称

-Dtest<buildVariantName>=<yourTestName>

就像你有一个debug构建类型,它在编译后为你提供debug变体,那么如果你只想为这个构建变量运行一个测试,你应该声明一个这样的命令:

./gradlew -DtestDebug=UnitTestName testDebug


0
投票

Gradle命令对我不起作用。我使用下面的mentioened adb命令。为此你需要先建立你的apk。

adb shell am instrument -w -r -e package -e debug false .debug.test / android.support.test.runner.AndroidJUnitRunner

© www.soinside.com 2019 - 2024. All rights reserved.