# 콘솔창

10월 17, 2021 2:02:10 오전 org.junit.platform.launcher.core.EngineDiscoveryOrchestrator lambda$logTestDescriptorExclusionReasons$7

정보: 0 containers and 3 tests were Method or class mismatch

 

인텔리J 로 테스트케이스를 작성하는데 자꾸 나오는 문구!!

그렇다고 테스트 케이스가 실패나거나 안되는건 아닌데,

콘솔에 자꾸 빨간색으로 나오니 신경쓰여서 찾아보았다

 

 

원인

 

이 오류는 여러개의 테스트케이스를 작성해놓고

인텔리J 편의기능으로 하나의 테스트만 눌러서 실행했을 때 발생하는 것을 확인했다.

 

정확하게 확신은 없지만.. (댓글로 설명해주시면 수정할게요! ㅎㅎ)

 

인텔리J 편의 기능을 사용해서 하나의 테스트만

콕 집어서 테스트케이스를 실행하면

어쨌든 빌드는 해야하는데 전체 빌드하는 것도 아니고 하니

인텔리J가 자체의 빌드기능으로 빌드를 해서 실행해주는 것 같다.

 

내 설정의 기본 빌드툴은 Gradle인데 

갑자기 다른 빌드툴로 빌드를 하니

Method가 Missmatch 났다고 알려주는 것같다.

 

 

참고 : https://www.inflearn.com/questions/157200

 

 

 

 

 

 

 

 

 

해결방법

빌드툴을 그냥 인텔리J 꺼로 쓰라고 변경해주면

이런 MissMatch가 없어지는 것 같다.

 

위의 설정을 아래와 같이 변경하면 된다.

 

 

 

 

도움이 되는 글이었다면

로그인이 필요없는 공감 버튼 꾹 눌러주세요! 

 

 

 

 

 

JUnit을 적용하기 시작하면서 제일 처음 마주한 에러였다.

야심 차게 TDD 적용을 꿈꾸며

@Test 애노테이션을 넣고 실행했는데

다음과 같은 에러가 발생했다.

 

 

 

 

 

 

 

에러 로그

java.lang.ExceptionInInitializerError
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
	at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
	at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
	at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:87)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:73)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:46)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:522)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.IllegalStateException: Failed to find class [org.junit.runners.model.MultipleFailureException]: SpringJUnit4ClassRunner requires JUnit 4.9 or higher.
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:102)
	... 17 more

 

 

ExceptionInInitExceptionInInitializerError 라는

생소한 에러를 마주하니

당황스러웠다..

전혀 감이 안잡혔다.

 

그렇지만 차분하게 읽어보니

아주 아주 친절하게 해결방법이 

적혀있었다.

 

 

 

 

 

 

 

 

해결

 

 

에러 로그를 자세히 보니

SpringJUnit4ClassRunner requires JUnit 4.9 or higher.라는

내용이 친절하게 나와있다.

JUnit4를 사용하고 싶다면 4.9 이상의

버전으로 세팅되어 있어야 한다.

 

 

<dependency>
	<groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.9</version>
    <scope>test</scope>
</dependency>

 

위의 내용과 같이 

4.9 버전으로 세팅을 다시 해주니 

정상적으로 잘 작동하는 것을 확인할 수 있었다!

 

 

JUnit은 버전도 다양하고 호환성에

아주 예민한 패키지인 것 같다.

 

 


 

 

도움이 되었다면

로그인이 필요 없는 공감 버튼 꾹 눌러주세요! 

 

 

 

SpringJUnit4ClassRunner.class의 빨간 줄

 

Spring에 JUnit을 적용하기 위해서는 찾아보던 중

적용하기 위해서는 

RunWith(SpringJUnit4ClassRunner.class)

애노테이션을 클래스 위에 

선언해주어야 한다길래 

그대로 했더니 아래 캡처와 같이 빨간 줄이 떴다..

 

 

그리고 빨간줄이 없어지질 않는다!! ㅠㅠ

 

 

저렇게 이클립스상에 빨간 줄로 표시되는 경우는 보통

필요로 하는 내용과 다른 정보를 넣었거나

존재하지 않은 내용을 넣었거나..

어쨌든 무언가 틀렸다는 내용이다.

 

 

 

 

 

 

 

해결

 

관련해서 찾아보니

시스템이 정상적으로 돌아갈 정도로 

spring 프레임워크 환경을 구축했다고 해서 

JUnit을 사용할 수 있는 게 아니었다.

 

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.2.9.RELEASE</version>
</dependency>

 

JUnit을 사용하기 위해서는 

spring-test라는 이름의 의존성을 주입해주어야 한다.

 

 

나는 지금까지 JUnit을 고려하지 않았기 때문에

특별히 큰 문제없이 개발했을 뿐 

JUnit을 사용하기 위해서는 spring-test이 꼭 필요하다.

 

 


 

 

포스팅이 도움이 되었다면

로그인이 필요 없는 공감 버튼 꾹 눌러주세요! 

 

 

+ Recent posts

"여기"를 클릭하면 광고 제거.