2017-12-13 6 views
0

테스트 코드로 JAR을 만들고 다른 프로젝트에서 테스트를 실행할 계획입니다.JAR 의존성에서 Runnning 테스트

다음은 구현하려는 방식입니다.

프로젝트 B :

configurations { testApi } 
task testJar .... 
artifacts { testApi testJar } 

프로젝트 A는 :

dependencies { 
    testRuntime "xx.xxx.xxx.projectName", configuration: "integtest"; 
} 

시험은이 방법으로 실행되지 않는 것 같습니다. 문제가 될 수있는 것에 대한 아이디어가 있습니까? 어떤 더 나은 접근법?

+0

좀 더 자세하게 설명해주십시오. e. 지. 무엇이 "실행 중이 아닌지"어떤 에러가 나옵니까? – Vampire

+0

'gradle test'를 실행하면 테스트 클래스가 jar에서 인식되지 않습니다. 그러나 빌드가 성공적으로 완료되었습니다. – AvenashKrish

답변

0

Gradle을 만 java 플러그인으로 test 작업 project.sourceSets.test.output.classesDirs입니다 각각의 Test 타입 작업의 testClassesDirs 속성을 통해 구성된 디렉토리에 테스트 클래스를 찾습니다. 종속성이있는 JAR 파일에서 테스트 실행은 지원되지 않습니다.

JAR 파일을 추출하고 추출 된 디렉토리를이 속성에 추가해야합니다. 나는 다음과 같은 구조가 작동해야한다고 생각하는데, 나는 그것을 테스트하지 않았다 :

configurations { 
    externalTests 
} 
dependencies { 
    externalTests "xx.xxx.xxx.projectName", configuration: "integtest" 
    testRuntime "xx.xxx.xxx.projectName", configuration: "integtest" 
} 
test { 
    // if only one dependency in externalTests you can use the simpler, it will fail if there are multiple dependencies 
    testClassesDirs += zipTree(configurations.externalTests.singleFile) 
    // if multiple dependencies in externalTests you need to use 
    testClassesDirs += configurations.externalTests.files.collect { zipTree it }.sum() 
} 
+0

감사합니다. @Vampire, 위의 방법을 시도 할 때'initializationError'' java.lang.ClassNotFoundException'이 발생합니다. 클래스를 인식하지 못하고있는 것 같습니다. 어떤 아이디어? JAR을 풀고'testClassesDir = files ("$ {buildDir}/integTest/classes/java")'를 설정하려고했습니다. 그것도 같은 오류가 발생했습니다. – AvenashKrish

+0

다음 클래스 패스에 원래 그것을했던 것처럼 넣어, 그에 따라 내 대답을 업데이트했습니다. – Vampire

+0

이게 보이지 않는 것 같습니다. JAR에서 압축 해제 된 파일을 사용할 것을 제안하는 어떤 것도,'testClassesDir = files ("$ {buildDir}/integTest/classes/java")'와 같은 것을 사용하려고 시도하고 있습니다. – AvenashKrish