답변:
단일 테스트 클래스를 실행하려면 Airborn의 답변이 좋습니다.
here 에서 찾은 몇 가지 명령 줄 옵션을 사용하면 이와 같이 간단하게 수행 할 수 있습니다.
gradle test --tests org.gradle.SomeTest.someSpecificFeature
gradle test --tests *SomeTest.someSpecificFeature
gradle test --tests *SomeSpecificTest
gradle test --tests all.in.specific.package*
gradle test --tests *IntegTest
gradle test --tests *IntegTest*ui*
gradle test --tests *IntegTest.singleMethod
gradle someTestTask --tests *UiTest someOtherTestTask --tests *WebTest*ui
gradle 버전 1.10부터 테스트 필터를 사용하여 테스트 선택을 지원합니다 . 예를 들어
apply plugin: 'java'
test {
filter {
//specific test method
includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"
//specific test method, use wildcard for packages
includeTestsMatching "*SomeTest.someSpecificFeature"
//specific test class
includeTestsMatching "org.gradle.SomeTest"
//specific test class, wildcard for packages
includeTestsMatching "*.SomeTest"
//all classes in package, recursively
includeTestsMatching "com.gradle.tooling.*"
//all integration tests, by naming convention
includeTestsMatching "*IntegTest"
//only ui tests from integration tests, by some naming convention
includeTestsMatching "*IntegTest*ui"
}
}
멀티 맛 환경 (안드로이드에 대한 일반적인 사용 사례)의 경우, 이 답변을 확인 는 AS, --tests
인수가 지원되지 않는 것입니다 및 오류가 발생합니다.
--tests
클래스 내에서 단일 테스트 메소드를 호출하는 데 사용 하더라도 실행되지 않는 모든 클래스를 포함한 모든 클래스에 대한 반복이 너무 느립니다. 그 속도 저하가 우리의 환경 때문인지 또는 다른 사람들에게 영향을 미치는지 모릅니다. 더 많이 찾으면 업데이트 할 수 있습니다.
이 링크 섹션 23.12 에서 테스트 를 위한 필터링 클래스의 예를 더 찾을 수있는 gradle -Dtest.single=ClassUnderTestTest test
것처럼 단일 클래스를 테스트하거나 regexp를 사용하려는 경우 수행 gradle -Dtest.single=ClassName*Test test
할 수 있습니다 . 테스트.
--tests
은 replace로 설정된 명령 행 옵션을 지원합니다 -DtestTaskName.single
.
--test
옵션을 사용하면 테스트를 테스트 클래스 내의 단일 메소드로 제한 할 수도 있습니다. 예를 들어 : 클래스 내 gradle test --tests *MyTest.someMethod
에서 단일 테스트 만 실행 someMethod
합니다 MyTest
. 테스트 사례를 작성할 때 일반적으로 한 번에 단일 메서드를 실행하여 디버깅해야하는 출력에만 더 쉽게 집중 한 다음 마지막에 전체 테스트 사례를 실행합니다.
gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
입니다. 참조 gradle.org에이 토론
--no-rebuild
예 gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
를 들어 종속성이 재 빌드되는 것을 막고 단일 테스트를 더 빨리 실행 하기위한 옵션 을 사용할 수도 있습니다 .
다중 모듈 프로젝트가있는 경우 :
모듈 구조가
root-module
-> a-module
-> b-module
실행하려는 테스트 (testToRun)는 b- 모듈에 있으며 전체 경로는 com.xyz.b.module.TestClass.testToRun입니다.
여기에서 b- 모듈에서 테스트를 실행하고 싶으므로 b- 모듈에 사용할 수있는 작업이 표시됩니다.
./gradlew :b-module:tasks
위의 명령은 b 모듈의 모든 작업을 설명과 함께 나열합니다. 이상적인 경우 에는 해당 모듈에서 단위 테스트 를 실행하는 test 라는 작업이 있습니다 .
./gradlew :b-module:test
이제 b- 모듈에서 모든 테스트를 실행하는 시점에 도달했습니다. 마지막으로 특정 경로 패턴과 일치하는 테스트를 실행하기 위해 위 작업에 매개 변수를 전달할 수 있습니다.
./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
지금, 당신이 실행하면이 대신
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
모듈 a와 b 모두에 대해 테스트 작업을 실행하는데, a- 모듈에 위의 패턴과 일치하는 것이 없기 때문에 실패 할 수 있습니다.
./gradlew :b-module:test --tests testToRun
많은 것을 알아 낸 후에 다음이 나를 위해 일했습니다.
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
참고하시기 바랍니다 --tests
당신이 다른 빌드가있는 경우 옵션이 작동하지 않을 수 있습니다 types/flavors
(실패를 Unknown command-line option '--tests'
). 이 경우 특정 테스트 작업을 지정해야합니다 (예 : testProdReleaseUnitTest
just 대신 test
)
./gradlew test --tests *testMyCollectionTake*
대체해야하는 방법을 알 수 없습니다test
다음은 gradlew
명령 행 옵션을 사용하여 단일 테스트 클래스를 실행하는 명령입니다.
gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
com.example.TestClass
변형으로 클래스를 실행하는 아래 예제 Variant_1
:
gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
필자의 경우 Eclipse Java 컴파일러 경고가 너무 높게 설정되어 있고 Eclipse가 클래스를 실행에 유효한 것으로 인식하지 못했습니다. 컴파일러 설정을 업데이트하면 문제가 해결되었습니다. 여기에서 더 많은 것을 읽을 수 있습니다 : 주석이 아닌 null을 해결할 수 없습니다.