# 콘솔창

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이 꼭 필요하다.

 

 


 

 

포스팅이 도움이 되었다면

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

 

 

개발하고 있는 서버에 JUnit을 적용하고

Mock 클래스를 사용해서 MVC에 대한

테스트 환경을 구축하였더니

다음과 같은 에러가 발생하였다.

 

 

에러 콘솔 캡처

 

 

 

에러 로그

java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig

…

Caused by: java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 32 more

 

 

에러만 해석해보자면

JSP를 사용하기 위해 필요한 패키지인 servlet 안에

SessionCookieConfig 클래스가 없어서 나는 에러이다.

 

이런 문제는 보통 버전에서 오는 경우가 많은 것 같아서 

찾아보니 역시 버전 호환성의 문제였다.

 

 

 

 

 

 

 

나는 현재 servlet-api 2.5버전을 사용하고 있었는데 

너무 옛버전이라서 불가능하다고 한다.

 

 

Junit 사용 불가 버전

 

 

 

MockHttpSession을 사용하기 위해서는

최소 3.1.0 버전을 사용해야 한다.

 

메이븐에서 검색해보니 

dependency 작성 규칙도 바뀌어 있었다

2.5 버전은 확실히 너무 옛 버전인 것 같다...

 

 

 

해결

 

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>3.1.0</version>
    <scope>provided</scope>
</dependency>

 

상위 버전으로 의존성만 변경하니 

문제없이 잘 작동한다.

 

 


 

 

 

 

포스팅이 도움이 되었다면

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

 

 

 

 

ASP자체가 익숙하지 않다 ㅠㅠ 

 

JSP만 접하다 보니 APS문법 자체가 어색해보이기까지 하다

보통 <!-- --> 모양새는 주석에 쓰이는데

앞에 #을 붙여 ASP에서 사용하는 문법으로 사용된다.

 

 

 

옵션

virtual과 file이 있는데 

file은 상대 경로를 말하며

virtual은 서버에서의 가상디렉토리를 말한다.

( www.example.com/inc/banner.asp로 페이지를 로드할 수 있다면,

/inc/banner.asp를 값으로 넣어주면 된다.) 

 

 

 

  <!--#include virtual = "/inc/banner.asp"-->

 

 

 

 

 

struts 관련 xml이 컴파일되지 않을 경우 발생 에러
struts로 생성한 객체가 없는데 관련url로 호출할 떄 발생하는 것으로 보임

 


2019. 6. 20 ▒▒▒▒ 9:43:17 org.apache.catalina.core.StandardWrapperValve invoke
▒ɰ▒: Servlet.service() for servlet default threw exception
java.lang.NoClassDefFoundError: org/apache/struts2/util/ClassLoaderUtils
        at org.apache.struts2.codebehind.CodebehindUnknownHandler.locateTemplate(CodebehindUnknownHandler.java:256)
        at org.apache.struts2.codebehind.CodebehindUnknownHandler.handleUnknownAction(CodebehindUnknownHandler.java:99)
        at com.opensymphony.xwork2.DefaultUnknownHandlerManager.handleUnknownAction(DefaultUnknownHandlerManager.java:111)
        at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:182)
        at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
        at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
        at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter.doFilter(StrutsExecuteFilter.java:93)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:91)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.dsunfold.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:61)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
        at java.lang.Thread.run(Thread.java:619)

'Web 개발 > 간단한 팁' 카테고리의 다른 글

[팁] JUnit 에러 : java.lang.NoClassDefFoundError  (0) 2019.11.07
ASP include  (0) 2019.07.19
Ubuntu Timezone 설정하기  (0) 2018.07.31
AWS에 로컬 파일전송하기 (scp)  (0) 2018.07.29
[팁] JSP 현재 페이지 EL로 받기  (0) 2018.02.20

AWS e2 Ubuntu로 서버를 구축하는데 로그 파일을 보니 시간이 안 맞는다는 것을 알게 되었다.


시간 확인 명령어를 쳐보니 다음과 같다 (현재시간은 10시 32분..)



$ date

2018. 07. 31. (화) 01:32:33 UTC



ntp도 찾아서 설치해보고 rdate도 찾아서 설치해봤지만 바뀌지 않는다. ㅠㅠ


알고보니 Timezone을 변경해줘야 된다고한다!

그래서 적용해보았다.


먼저 설정되어있는 Timezone을 확인.



$ cd /etc 

$ vi more timezone

Etc/UTC



해당 명령어를 입력하면 GUI가 나온다.




$ dpkg-reconfigure tzdata



Asia -> Seoul로 설정하면 끝!


잘 바뀌었다.


$ date

2018. 07. 31. (화) 10:34:31 KST




Spring Boot로 웹개발을 완료해서 AWS ec2 우분투에 배포를 할려고하는데 

방법을 모르겠어서 한참을 헤맸다.


GUI로 무언가 구성되어있거나 이클립스로 연동해서 손쉽고 간편하게 배포를 할 수 있을 줄 알았는데 

생각보다 어렵다 ㅠ AWS 에서 제공해주는 툴이 있는거 같긴한데... 잘 모르겠다 


(알게되면 추가로 올릴 생각입니다..)



찾아보니 jar파일을 생성해서 서버에 올리고 java 명령으로 실행을 시켜주면 배포가 완료되는 것으로 보인다. 

jar 파일은 메이븐으로 생성하고 ec2에 전송하면 배포가 끝이다!


장황하게 설명했지만 

사실 이 포스트에서는 로컬에서 ec2로 전송하는 방법중에 하나인 scp를 기록하기위해서 썼다..



scp -i (key 위치) (전송할 파일) (호스트명:저장할 위치)


scp -i
   /kyome/aws_keys/mykey.pem
   /target/OhJooYeo-0.0.1-SNAPSHOT.jar
    ubuntu@~~.compute.amazonaws.com:/home/ubuntu/deploy



- jsp 경로 받기


${pageContext.request.requestURI}



- forward 되는 주소값 그대로 받기


${requestScope['javax.servlet.forward.request_uri']}






+ Recent posts

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