Android 使用Gradle运行特定的仪器单元测试
有没有一种方法可以使用Gradle运行特定的Android instrumentation单元测试?我试过了Android 使用Gradle运行特定的仪器单元测试,android,unit-testing,gradle,Android,Unit Testing,Gradle,有没有一种方法可以使用Gradle运行特定的Android instrumentation单元测试?我试过了 gradle -Dtest.single=UnitTestName connectedInstrumentTest 但是它似乎运行包中的所有测试。模式是-D.single=,因此在您的示例中应该是: gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest 注:此答案已过时。您应该在最新版
gradle -Dtest.single=UnitTestName connectedInstrumentTest
但是它似乎运行包中的所有测试。模式是-D.single=
,因此在您的示例中应该是:
gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest
注:此答案已过时。您应该在最新版本的Gradle中使用--tests
开关。(有关解释,请参见其他答案)
你得看看这个 我在这个github存储库中遇到了一个问题,这个家伙解决了我的问题并上传到maven,所以在我的build.gradle文件中我使用了这个插件 说明写在他的存储库中。你可以很容易地理解它 使用这个android单元测试插件后,我可以使用
../gradlew -Dtest.single=SomeTest test
或
现在它工作了,我只能运行我想运行的特定测试,Erdi的答案对我不起作用,但我的所有测试类都有一个单亲家长,所以我可以这样做:
public abstract class BaseEspressoTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
//...
@Override
protected void runTest() throws Throwable {
if(getClass().getSimpleName().equals("MyTestClassName")) {
super.runTest();
}
}
//...
}
您不应该忘记在
test
属性声明之后指定生成变量名称,如
-Dtest=
例如,如果您有一个编译后提供变量的debug
生成类型,那么如果您只想为此生成变量运行测试,则应声明如下命令:
/gradlew-DtestDebug=UnitTestName testDebug
使用test。single
似乎已被弃用。新的正确方法是
./gradlew :<module>:test --tests <pattern>
/gradlew::test——测试
其中,
可能类似于:
运行com.example.MyTest中的所有测试方法com.example.MyTest
匹配名称以MyTest结尾的每个类中的每个方法*MyTest
在任何包中运行MyTest类中的特定测试方法*.MyTest.myMethod
测试
任务之前给出模块路径;否则,当它在每个子项目中搜索您的测试模式时,您将得到一条误导性的错误消息
在Gradle网站上我可以找到的任何地方都没有记录这些信息。如果您使用的是
instrumentationTestRunner,则此功能有效:
./gradlew test -Pandroid.testInstrumentationRunnerArguments.class=<pkg>.YourClassName
您可以使用tests\u regex
参数来替代:
./gradlew app:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.tests_regex=PartialClassName*
./gradlew app:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.tests_regex=partialMethodName*
由于Android gradle插件1.1.0-rc1,可以通过执行以下命令,使用--tests
标志运行单个测试类:
./gradlew app:testDebug --tests=com.example.MyTest
请参见Gradle命令不适用于我。
我使用下面的命令。
为此,您需要首先构建apk
adb shell am instrument-w-r-e package-e debug false.debug.test/android.support.test.runner.AndroidJUnitRunner感谢您的回答,但没有帮助gradlew-DconnectedInstrumentTest。single=UnitTestName connectedInstrumentTest
也启动所有测试。UnitTestName
是类名还是测试方法名?它必须是一个类名,它是一个类名。我还尝试添加一个包名,但也没有成功。我也遇到过这种情况。在我的例子中,/gradlew-Dtest.single=SimpleTest测试
。然而,它运行我所有的测试。我有大约11个测试,我只想在SimpleTest类中运行1个测试。@IvanGromov我解决了这个问题。有人解决了这个问题,并在他的github中创建了自己的插件。确定这是一个应用了java插件的模块吗?确定这不是Gradle的一个古老版本吗?如果我执行/gradlew test--tests*MyTest
,我会得到未知命令行选项--tests'
,但是如果执行/gradlew testStagingDebug--tests*MyTest
,它工作得很好。(我的项目有多种风格,因此testStagingDebug
是我通常运行以执行测试的任务,尽管test
任务存在并工作。)除非在模式中指定通配符或使用::testDebug(或其他风格),否则您似乎会得到Unknown命令行选项“-tests”
我没有使用--tests
而是使用了以下内容/gradlew:app:connectedDebugAndroidTest-Pandroid.testinstrumentationrunnearguments.class=com.locasplates.android.sdk.TestActivityTest
,因为@ChrisJones的答案是针对本地单元测试的。如果你想运行插入式(单元)测试,你需要使用Michael Osofsky Answer,这是唯一一个真正适用于Android Gradle插件2.0及更高版本插入式测试的版本。语法更复杂,但是,是的……这也适用于在连接的手机上运行测试:/gradlew connectedAndroidTest-Pandroid.testInstrumentationRunnerArguments.class='.YourClassName'
对于测试特定的软件包,它是-Pandroid.testinstrumentrunnerarguments.package=my.package
,我总是忘记了这一点,不得不不断地回到这里看看这个。因此,我编写了一个可能对其他人有帮助的快速shell脚本:运行一个特定的单元测试:/gradlew connectedDevAndroidTest-Pandroid.testInstrumentationRunneArguments.class=com.example.StringUtilTest#testSelectLanguageFragment
从两个特定的类运行测试(用逗号分隔):/gradlew connectedDevAndroidTest-Pandroid.testInstrumentationRunnerArguments.class=com.example.StringUtilTest,com.example.OtherTest
参考链接更改,目前应该是正确的
./gradlew app:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=<pkg>.YourClassName
./gradlew app:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.tests_regex=PartialClassName*
./gradlew app:connectedDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.tests_regex=partialMethodName*
./gradlew app:testDebug --tests=com.example.MyTest