Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jqwik 오류 - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - gradle 6.x 버전별 판정 이슈 #1020

Open
pequt opened this issue Aug 2, 2024 · 2 comments
Labels
bug Something isn't working

Comments

@pequt
Copy link

pequt commented Aug 2, 2024

안녕하세요.

네이버 사내 프로젝트에서 fixture-monkey 사용중 이슈가 확인되어 보고드립니다.
스팸 방지를 위해 사내 메일을 직접 남기지는 않으려고 합니다.
추후 회사내 경로로 연락 필요하신 경우 코멘트로 담당자 성함 검색에 필요한 키워드 정도만 알려주시면 그 쪽으로 계속 연락드리겠습니다.

재현을 빠르게 하실 수 있도록 첨부 파일을 추가했습니다. 여기에는 문제를 재현하기 위한 최소한의 뼈대만 남겼습니다.
fixture-monkey-jqwik-gradle-report.tar.gz

현재 발생하는 이슈 원인을 제가 확신하기 어려우나, 증상은 다음과 같은 것이 있습니다.

  • jqwik - junit 5 문제
    jqwik 에서 다음과 같은 경고가 항시 발생하는 것으로 보입니다.
    gradle test 실행시 --debug 레벨 로그를 남기면 확인 가능합니다.
Gradle Test Executor 2 STANDARD_ERROR
    8월 02, 2024 11:53:54 오전 org.junit.platform.launcher.core.DefaultLauncher handleThrowable
    경고: TestEngine with ID 'jqwik' failed to discover tests
    java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryListener()Lorg/junit/platform/engine/EngineDiscoveryListener;
    	at net.jqwik.engine.discovery.JqwikDiscoverer.discover(JqwikDiscoverer.java:32)
    	at net.jqwik.engine.JqwikTestEngine.discover(JqwikTestEngine.java:41)
    	at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:177)
  • testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - gradle 6.x 판정 - fixture-monkey 요구 등

testRuntimeOnly 'org.junit.platform:junit-platform-launcher' 이 build.gradle 에 있다면 gradle 6.x 에선 버전 관계없이 성공 판정하는 것으로 보입니다. 다만 gradle 의 다른 major 버전은 확인하지 않았습니다.

testRuntimeOnly 'org.junit.platform:junit-platform-launcher' 이 build.gradle 에 없다면...
gradle 6.1 사용시 성공 판정되고, gradle 6.9.4 사용시 실패 판정됩니다.

그리고 fixture-monkey 사용할 때 junit-platform-launcher 가 필수적이라는 언급은 아직 찾지 못했습니다.
묵시적으로 요구되는 것인가요? 하지만 jqwik exception 이 무조건 발생하고 있는 만큼, junit-platform-launcher 가 필수는 아닐 가능성이 훨씬 높아보이기도 하고요.

  • 최종
    각종 증상이나 변화점을 주어가며 확인은 했으나, jqwik 문제인지, jqwik 밖의 의존성 문제인지, 단순 문서 누락인지 제가 판단할 수 없을 것 같아 이슈 등록하게 되었습니다.

  • 사용한 command line

> ./gradlew wrapper --gradle-version=6.1
> ./gradlew --debug --no-daemon clean test
> ./gradlew wrapper --gradle-version=6.9.4
> ./gradlew --debug --no-daemon clean test

감사합니다.

@pequt pequt added the bug Something isn't working label Aug 2, 2024
@seongahjo
Copy link
Contributor

seongahjo commented Aug 3, 2024

@pequt 님 안녕하세요.

이슈 제보해주셔서 감사합니다.

말씀 주신 이슈 자세히 확인해보니 jqwik-engine 의존성을 추가하면 JqwikDiscoverer#discover가 실행되는데 메소드 안의 EngineDiscoveryListener 클래스를 못 찾아서 발생한 이슈였습니다.

gradle 6.4 이전 버전에서도 동일하게 이슈가 발생하나 예외를 catch하고 있었고, 6.4 버전부터 명시적으로 예외를 발생시키고 있는 걸로 보입니다.

이 이슈는 1.1.0 배포 이후에 다음 버전에서 해결이 될 것 같습니다.

임시로 해결 방법을 공유드리면 gradle에서 사용할 테스트 엔진을 정의할 때 아래처럼 정의하시면 의존성 추가 없이 이슈 해결이 가능합니다.

tasks.named('test') {
    useJUnitPlatform {
        excludeEngines = ["jqwik"]
    }
}

감사합니다.

@pequt
Copy link
Author

pequt commented Aug 5, 2024

우선 알려주신 내용으로 대응하겠습니다.
이슈는 새 버전으로 해결될 때까지 open 해야 될 것 같네요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants