首页 文章

使用gradle运行特定的单元测试

提问于
浏览
34

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

gradle -Dtest.single=UnitTestName connectedInstrumentTest

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

提前谢谢,伊万 .

8 回答

  • 0

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

    -Dtest<buildVariantName>=<yourTestName> .

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

    ./gradlew -DtestDebug=UnitTestName testDebug

  • -1

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

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

  • 20

    使用 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
    

    注意:这个答案已经过时了 . 您应该在最新版本的Gradle中使用--tests开关 . (有关解释,请参阅其他答案)

  • 0

    如果您使用的是 instrumentationTestRunner ,则此方法有效:

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

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

  • 19

    从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

  • 12

    你得检查一下 .

    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
    

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

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

相关问题