Closed SungHuii closed 5 months ago
안녕하세요, 요건 부록A, B를 한 코드에서 똑같이 적용하다보니 생긴 문제로 보이는데요. GlobalExceptionHandler.java에서 모든 예외를 대상으로 Internal Server Error를 반환하고 있는 것을 확인할 수 있습니다.
@ExceptionHandler(Exception.class)
protected ResponseEntity<ErrorResponse> handle(Exception e){
e.printStackTrace();
log.error("Exception", e);
return createErrorResponseEntity(ErrorCode.INTERNAL_SERVER_ERROR);
}
그런데 깨지는 테스트 코드를 보면 유효성 검사에 실패했을 때는 400 응답 코드를 반환해야 하는데 500 응답 코드를 반환하고 있어 테스트가 실패하는 것을 확인할 수 있습니다.
Status
Expected :400
Actual :500
<Click to see difference>
그래서 이 에러를 해결하려면 Validation 예외가 발생했을 때는 400을 반환하게 처리해주면 됩니다. GlobalExceptionHandler.java에 대한 처리를 Exception 상단에 추가해주면 됩니다.
https://github.com/shinsunyoung/springboot-developer-2rd/commit/deb90b1c963f31401b9b50cb427852200082a0f7 에 커밋해두었으니 보고 따라하시면 CI도 잘 돌 것으로 예상됩니다. 혹시나 안되면 다시 코멘트 남겨주세요 🙇
감사합니다! 🙇
챕터 12에서 ci.yml을 추가한 뒤 github에서 확인을 했을 때 체크표시가 뜨지 않고 X 표시가 나옵니다. 눌러서 확인해보니 Build with Gradle 에서 오류가 나는데 test구문에서 실패했다고 뜨는데, 로컬환경에서는 테스트가 전부 통과됩니다. 로컬환경 gradle 버전 확인도 해봤는데 뭐가 문제인지 감이 잘 안잡히네요 ..
깃허브 코드 공유드립니다.. https://github.com/SungHuii/Blog.git
4m 8s Run ./gradlew clean build ./gradlew clean build shell: /usr/bin/bash -e {0} env: JAVA_HOME: /opt/hostedtoolcache/Java_Zulu_jdk/17.0.11-9/x64 JAVA_HOME_17_X64: /opt/hostedtoolcache/Java_Zulu_jdk/17.0.11-9/x64 Downloading https://services.gradle.org/distributions/gradle-8.5-bin.zip ............10%.............20%............30%.............40%.............50%............60%.............70%.............80%............90%.............100%
Welcome to Gradle 8.5!
Here are the highlights of this release:
For more details see https://docs.gradle.org/8.5/release-notes.html
Starting a Gradle Daemon (subsequent builds will be faster)
Note: Some input files use or override a deprecated API.
TokenProviderTest > validToken(): 유효한 토큰일 때에 유효성 검증에 성공한다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1773 Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException at ScriptUtils.java:282 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException at DbException.java:514
TokenProviderTest > validToken(): 만료된 토큰인 때에 유효성 검증에 실패한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
TokenProviderTest > getAuthentication(): 토큰 기반으로 인증 정보를 가져올 수 있다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
TokenProviderTest > getUserId(): 토큰으로 유저 ID를 가져올 수 있다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
TokenProviderTest > generateToken(): 유저 정보와 만료 기간을 전달해 토큰을 만들 수 있다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
BlogApiControllerTest > deleteArticle: 블로그 글 삭제에 성공한다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1773 Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException at ScriptUtils.java:282 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException at DbException.java:514
BlogApiControllerTest > findArticle: 블로그 글 조회에 성공한다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
BlogApiControllerTest > findAllArticles: 블로그 글 목록 조회에 성공한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
BlogApiControllerTest > addArticle: 블로그 글 추가에 성공한다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
BlogApiControllerTest > updateArticle: 블로그 글 수정에 성공한다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
TokenApiControllerTest > createNewAccessToken : 새로운 액세스 토큰을 발급한다. FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:145
11 tests completed, 11 failed
FAILURE: Build failed with an exception.
What went wrong: Execution failed for task ':test'.
Try:
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 4m 7s 8 actionable tasks: 7 executed, 1 up-to-date Error: Process completed with exit code 1.