有没有办法使用Gradle运行特定的Android检测单元测试?我试过了
gradle -Dtest.single=UnitTestName connectedInstrumentTest
但它似乎在包中运行所有测试。
使用test.single
似乎已被弃用。这样做的新正确方法是
./gradlew :<module>:test --tests <pattern>
其中<pattern>
可能是这样的:
com.example.MyTest
在com.example.MyTest中运行所有测试方法*MyTest
匹配名称以MyTest结尾的每个类中的每个方法*.MyTest.myMethod
在任何包中的MyTest类中运行特定的测试方法如果您有多项目构建,请确保在test
任务之前给出模块路径;否则,当您在每个子项目中搜索测试模式时,您将收到误导性错误消息。
Gradle站点上的任何内容都没有记录在我能找到的地方。
模式是-D<testTaskName>.single=<TestClass>
所以在你的例子中它应该是:
gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest
注意:此答案已过时。您应该在最新版本的Gradle中使用
--tests
开关。 (见解释的其他答案)
如果你使用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'
从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
你得检查一下。
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
。我们可以进一步扩展它以仅执行特定的测试方法(或方法):
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();
}
}
//...
}
您不应忘记在test
属性声明之后指定构建变体名称
-Dtest<buildVariantName>=<yourTestName>
。
就像你有一个debug
构建类型,它在编译后为你提供debug
变体,那么如果你只想为这个构建变量运行一个测试,你应该声明一个这样的命令:
./gradlew -DtestDebug=UnitTestName testDebug
Gradle命令对我不起作用。我使用下面的mentioened adb命令。为此你需要先建立你的apk。
adb shell am instrument -w -r -e package -e debug false .debug.test / android.support.test.runner.AndroidJUnitRunner