有没有办法使用Gradle运行特定的Android单元测试?我试过了
gradle -Dtest.single=UnitTestName connectedInstrumentTest
但它似乎在包中运行所有测试 .
提前谢谢,伊万 .
您不应忘记在 test 属性声明之后指定构建变体名称
test
-Dtest<buildVariantName>=<yourTestName> .
-Dtest<buildVariantName>=<yourTestName>
就像你有一个 debug 构建类型,它在编译后给你 debug 变体,那么如果你只想为这个构建变体运行一个测试,你应该声明一个这样的命令:
debug
./gradlew -DtestDebug=UnitTestName testDebug
Gradle命令对我不起作用 . 我使用下面的mentioened adb命令 . 为此你需要先 Build 你的apk .
adb shell am instrument -w -r -e package -e debug false .debug.test / android.support.test.runner.AndroidJUnitRunner
使用 test.single 似乎已被弃用 . 新的正确方法是这样做
test.single
./gradlew :<module>:test --tests <pattern>
<pattern> 可能是这样的:
<pattern>
com.example.MyTest 在com.example.MyTest中运行所有测试方法
com.example.MyTest
*MyTest 匹配名称以MyTest结尾的每个类中的每个方法
*MyTest
*.MyTest.myMethod 在任何包中的MyTest类中运行特定的测试方法
*.MyTest.myMethod
如果您有多项目构建,请确保在 test 任务之前给出模块路径;否则,当您在每个子项目中搜索测试模式时,您将收到误导性错误消息 .
Gradle站点上的任何内容都没有记录在我能找到的地方 .
模式是 -D<testTaskName>.single=<TestClass> 所以在你的例子中应该是:
-D<testTaskName>.single=<TestClass>
gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest
注意:这个答案已经过时了 . 您应该在最新版本的Gradle中使用--tests开关 . (有关解释,请参阅其他答案)
如果您使用的是 instrumentationTestRunner ,则此方法有效:
instrumentationTestRunner
./gradlew test -Pandroid.testInstrumentationRunnerArguments.class='<pkg>.YourClassName'
使用gradle 2.10和android gradle插件2.0.0-beta2
从Android gradle插件1.1.0-rc1开始,可以通过执行以下命令使用 --tests 标志运行单个测试类:
--tests
./gradlew testDebug --tests=com.example.MyTest
见http://tools.android.com/tech-docs/unit-testing-support#TOC-Running-from-Gradle
你得检查一下 .
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
现在它正在工作,我只能运行我想要的特定测试
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 . 我们可以进一步扩展它以仅执行特定的测试方法(或方法):
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(); } } //... }
8 回答
您不应忘记在
test
属性声明之后指定构建变体名称-Dtest<buildVariantName>=<yourTestName>
.就像你有一个
debug
构建类型,它在编译后给你debug
变体,那么如果你只想为这个构建变体运行一个测试,你应该声明一个这样的命令:./gradlew -DtestDebug=UnitTestName testDebug
Gradle命令对我不起作用 . 我使用下面的mentioened adb命令 . 为此你需要先 Build 你的apk .
adb shell am instrument -w -r -e package -e debug false .debug.test / android.support.test.runner.AndroidJUnitRunner
使用
test.single
似乎已被弃用 . 新的正确方法是这样做<pattern>
可能是这样的:com.example.MyTest
在com.example.MyTest中运行所有测试方法*MyTest
匹配名称以MyTest结尾的每个类中的每个方法*.MyTest.myMethod
在任何包中的MyTest类中运行特定的测试方法如果您有多项目构建,请确保在
test
任务之前给出模块路径;否则,当您在每个子项目中搜索测试模式时,您将收到误导性错误消息 .Gradle站点上的任何内容都没有记录在我能找到的地方 .
模式是
-D<testTaskName>.single=<TestClass>
所以在你的例子中应该是:如果您使用的是
instrumentationTestRunner
,则此方法有效:使用gradle 2.10和android gradle插件2.0.0-beta2
从Android gradle插件1.1.0-rc1开始,可以通过执行以下命令使用
--tests
标志运行单个测试类:见http://tools.android.com/tech-docs/unit-testing-support#TOC-Running-from-Gradle
你得检查一下 .
https://github.com/JCAndKSolutions/android-unit-test
我在这个github存储库中提出了一个问题,这个人解决了我的问题并上传到了maven,所以在我的build.gradle文件中我使用了这个插件 .
说明书写在他的资料库中 . 你可以轻松地遵循它 .
使用这个android-unit-test插件后,我可以使用喜欢
要么
现在它正在工作,我只能运行我想要的特定测试
Erdi的回答对我不起作用,但我的所有测试类都有一个单亲,所以我能够这样做:
这只执行
MyTestClassName
. 我们可以进一步扩展它以仅执行特定的测试方法(或方法):