Gradle에서 하나의 로컬 테스트 클래스 만 실행하는 방법


429

나는 Gradle을 처음 사용합니다. Gradle 1.10과 Ubuntu 13을 사용합니다.

SBT의 'testonly'와 비슷한 로컬 테스트 클래스를 하나만 실행하는 명령이 있는지 알고 싶습니다 .


답이 주어지면 이것이 계측 테스트가 아닌 로컬 테스트 에 관한 것임을 분명히해야합니다 . Android / Gradle은 이러한 로컬 테스트를 "단위"테스트라고함으로써 혼동을 일으 킵니다.
20:53에 tir38

답변:


560

단일 테스트 클래스를 실행하려면 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인수가 지원되지 않는 것입니다 및 오류가 발생합니다.


필터 접근 방식은 편리한 테스트 선택을 위해 작업 규칙과 결합 될 수 있습니다.
Matt Whipple

대규모 테스트 스위트의 경우 --tests클래스 내에서 단일 테스트 메소드를 호출하는 데 사용 하더라도 실행되지 않는 모든 클래스를 포함한 모든 클래스에 대한 반복이 너무 느립니다. 그 속도 저하가 우리의 환경 때문인지 또는 다른 사람들에게 영향을 미치는지 모릅니다. 더 많이 찾으면 업데이트 할 수 있습니다.
arntg

185

이 링크 섹션 23.12 에서 테스트 위한 필터링 클래스의 예를 더 찾을 수있는 gradle -Dtest.single=ClassUnderTestTest test것처럼 단일 클래스를 테스트하거나 regexp를 사용하려는 경우 수행 gradle -Dtest.single=ClassName*Test test할 수 있습니다 . 테스트.


30
최신 버전 (1.10부터 시작) --tests은 replace로 설정된 명령 행 옵션을 지원합니다 -DtestTaskName.single.
피터 Niederwieser

58
--test옵션을 사용하면 테스트를 테스트 클래스 내의 단일 메소드로 제한 할 수도 있습니다. 예를 들어 : 클래스 내 gradle test --tests *MyTest.someMethod 에서 단일 테스트 만 실행 someMethod합니다 MyTest. 테스트 사례를 작성할 때 일반적으로 한 번에 단일 메서드를 실행하여 디버깅해야하는 출력에만 더 쉽게 집중 한 다음 마지막에 전체 테스트 사례를 실행합니다.
Jeff French

10
또한 다중 모듈 프로젝트에서 단일 테스트를 실행하려면 command is gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test입니다. 참조 gradle.org에이 토론
하기 Bulat

2
--no-rebuildgradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test를 들어 종속성이 재 빌드되는 것을 막고 단일 테스트를 더 빨리 실행 하기위한 옵션 을 사용할 수도 있습니다 .
falconepl

2
그래도이 옵션은 Gradle 5에서 사용되지 않습니다
Eyal

108

다중 모듈 프로젝트가있는 경우 :

모듈 구조가

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- 모듈에 위의 패턴과 일치하는 것이 없기 때문에 실패 할 수 있습니다.


1
또는 간단히./gradlew :b-module:test --tests testToRun
Ahmed Ashour

32

많은 것을 알아 낸 후에 다음이 나를 위해 일했습니다.

gradle test --tests "a.b.c.MyTestFile.mySingleTest"


10
이 명령은 나를 위해 작동하지 않습니다. > 오류 : 알 수없는 명령 줄 옵션은 '--tests'
Tarkik

31

참고하시기 바랍니다 --tests당신이 다른 빌드가있는 경우 옵션이 작동하지 않을 수 있습니다 types/flavors(실패를 Unknown command-line option '--tests'). 이 경우 특정 테스트 작업을 지정해야합니다 (예 : testProdReleaseUnitTestjust 대신 test)


6
이 정확한 상황에 부딪쳤다. 감사합니다!
JPM

전체 예를 자세히 설명 할 수 있습니까? 와일드 카드를 사용하여 와일드 카드와 일치하는 3 가지 테스트를 실행하려고하는데 와일드 카드 테스트 이름으로 ./gradlew test --tests *testMyCollectionTake*대체해야하는 방법을 알 수 없습니다test
DanielCuadra

4

다음은 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 

2

끝에 별표 (*)를 추가해야합니다.

gradle test --tests "com.abc *"


2

MyTest라는 단일 테스트를 실행하십시오.

./gradlew app:testDebug --tests=com.example.MyTest

0

필자의 경우 Eclipse Java 컴파일러 경고가 너무 높게 설정되어 있고 Eclipse가 클래스를 실행에 유효한 것으로 인식하지 못했습니다. 컴파일러 설정을 업데이트하면 문제가 해결되었습니다. 여기에서 더 많은 것을 읽을 수 있습니다 : 주석이 아닌 null을 해결할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.