1. 스프링 테스트 한 번에 실행 중 오류
Gradle에 내장된 test를 사용하였다! 테스트를 짠 모든 코드를 한 번에 실행시켜줘서 편하다.
근데..
음 뭐 컨트롤러 테스트에 문제가 없는데
다시 테스트 해보니까 전부 터져버린 모습.. ???????????
전부 오류명이
Failed to load ApplicationContext
java.lang.IllegalStateException: Failed to load ApplicationContext 이고,
스프링부트 실행하다 중간에 끊 에러를 봤더니
No class com.example.crud.domain.Posts entity with id 1 exists!
org.springframework.dao.EmptyResultDataAccessException: No class com.example.crud.domain.Posts entity with id 1 exists! 라는 것이다....
원인은 PostServiceTest 부분에 오류가 생겼고, 그 오류 때문에 스프링부트가 멈춰서 ControllerTest가 실행이 안된 것이다.
2. No class com.example.crud.domain.Posts entity with id 1 exists!
ServiceTest 오류 난 곳을 봐보자
글 삭제하는 부분이 문제였다.
Dto 인스턴스를 만들고 Service에 넣어서 Repository에 저장하려다가 110번 줄 과정에서 오류가 생긴 건데
여기서 두 가지 문제점이 있었다.
하나는 여러 가지 테스트를 진행하면서 id가 쌓여서 삭제할 대상을 못 찾은 것이다.
1번 id를 삭제하라 했는데 4번까지 나와서 망해버렸다.
두 번째는 4번째까지 올라온 id를 찾아서 삭제해야 하는데, Dto 인스턴스는 정보 전달하는 역할이라 @Entity를 안 주고Id도 할당 안 해서 id를 못 찾는다!!!! 테스트 설계 자체가 잘못된 것... 수정해 주자...
글 수정 테스트로 id문제라 수정해 주었다
Dto가 아닌 바로 만들어서 Repository로 꽂아준 모습
3. 되던 테스트들이 갑자기 에러?
둘 다 각자 테스트 돌리면 아무 이상 없는데 같이 돌리면 터져버리는 모습...
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/C:/Programming/Crud/build/resources/main/data.sql]: INSERT INTO user(USER_ID,USERNAME,PASSWORD,EMAIL,AGE,CREATED_AT) VALUES(1,'이름', 1234,'intshc@gmail.com',24,'2023-05-18 19:17:00'); nested exception is org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.""USER""(USER_ID) ( /* key:1 */ CAST(1 AS BIGINT), 24, TIMESTAMP '2023-05-18 19:17:00', 'intshc@gmail.com', '1234', U&'\\c774\\b984')"; SQL statement:
INSERT INTO user(USER_ID,USERNAME,PASSWORD,EMAIL,AGE,CREATED_AT) VALUES(1,'이름', 1234,'intshc@gmail.com',24,'2023-05-18 19:17:00') [23505-214]
스프링 실행 시에 기본 테이블을 생성해 주었는데 id가 중복돼서 터진 것 같다..
그래서 id를 빼주었는데
ID는 NULL이 될 수 없다는 모습
구글링 해보니 h2 데이터베이스 버전이 올라가면서 생기는 오류라 한다.(현재 2.1.14 버전 쓰는 중)
근데 버전 낮춰도 안 고쳐짐, 오히려 다른 오류도 생겨서 자세히 봤는데
@GeneratedValue에 (strategy = GenerationType.IDENTITY)이 빠진 모습!!!!!!!!!!!!!!!!
😱😱😱😱😱😱😱😱 왜 빠트렸지
성공! 근데 실행 마무리가 안되는데... Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no] 로그가 찍히고 계속 버퍼링이다.
터미널에 ./gradlew build --scan 입력하고
yes 입력해줬는데 재실행해도 해결이 안 된다;; 그냥 test 폴더 우클릭한 뒤, 실행하는 걸로..
'Spring' 카테고리의 다른 글
org.springframework.data.mapping.PropertyReferenceException (0) | 2023.11.28 |
---|---|
스프링부트 3.0.0부터 Repository를 상속받는 PagingAndSortingRepository (2) | 2023.06.15 |
Cannot parse "TIMESTAMP" constant 에러 (0) | 2023.05.23 |
스프링 REST Docs .snippet 확장자 해결 (3) | 2023.04.25 |
스프링부트 JPA Mysql 연동(java 17, Springboot 3.0.5) (0) | 2023.03.28 |