• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

검색을 해도 해결이 안되어 질문드립니다

21.08.09 11:58 작성 조회수 1.54k

0

먼저 에러코드입니다

java.lang.NoSuchMethodError: org.junit.jupiter.api.extension.ExtensionContext.getRequiredTestInstances()Lorg/junit/jupiter/api/extension/TestInstances;

실행코드입니다

현재 인텔리제이를 쓰고있으며 스프링부트는 2.0.1입니다

강의를 들으며 학습을 할때는 최신버젼을 썻는데 실무에 적용하다 에러가 나서 질문드립니다

검색을 하여보니 부트 2.2.1전에는 junit4를 의존한다길레 maven에서 4를 exclude하고 5를 가져왔습니다

버젼은 junit5.7.2버젼입니다

험난한 과정을 거쳐 의존성주입에는 성공하였고 현재 프로젝트에서 jupiter피일이 잘 열리기도합니다

하지만 테스트에 실패합니다

스택오버플로우나 검색을하여도 junit의 버젼을 최신버젼으로 두라는게 답변의 전부이더군요

혹시나 하는마음에 질문드립니다...ㅠ

답변 1

답변을 작성해보세요.

1

java.lang.NoSuchMethodError 이 에러는 보통 라이브러리 버전이 맞지 않을 경우에 발생합니다. 가령 예를 들어 A라는 클래스에서 B에 있는 hello()를 호출한다고 가정했을 때 B에 hello()가 버전 2.0에 추가되었고 1.0에는 없다고 생각해보죠. 이 상황에서 A는 B의 2.0 버전을 써야 hello를 사용할 수 있는데 B를 1.0 버전을 사용한다면 위와 같이 NoSuchMethodError가 발생하는 겁니다.

아마도 pom.xml에서 임의대로 의존성을 변경하신 것 같은데 Junit 5 관련 의존성 버전이 잘 맞지 않는 걸로 보이고 그 중에서 org.junit.jupiter.api.extension.ExtensionContext.getRequiredTestInstances 이 메소드를 호출하고 있으나 getRequiredTestInstances가 없는 버전의 Junit을 쓰고 있는 것 같네요. 해결하려면 의존성 버전을 호환되도록 맞춰야 할텐데 스프링 부트 최신 버전을 쓰시면 기본적으로 JUnit 5를 쓸테니 다른 설정은 다 제거하시고 스프링 부트만 최신 버전으로 올려보시기 바랍니다.

contact님의 프로필

contact

질문자

2021.08.10

실무에 적용할려고 해보는 코드라 스프링부트버젼업은 힘들것같습니다

하지만 해결은했습니다.

메이븐빌드시 5.1버젼이 계속 추가되길레 보니

인텔리제이 .iml설정파일에 버젼이 5.1.0으로 되어있더군요 ㅡ.ㅡ...

왜 그런진 모르겠으나 .iml파일 수정하고 인텔리제이 캐쉬날리고 하니 잘되네요

오류덕분에 maven하고 인텔리제이공부 많이했네요 하하...

답변감사합니다! 다음에 비슷한 오류가 나올시 답변참고하여 라이브러리버젼부터 조사해봐야겠네요