spring(boot)/junit

[junit]save후 findById로 찾을때 못찾을 경우

수학소년 2022. 12. 11. 00:32

문제

책보면서 Repository 테스트 작성 중.

@DataJpaTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class ...RepositoryTest {

	@Autowired
	private ...Repository ...Repository;
	
	@BeforeAll
	public void setup() {
		Problem problem = new Problem();
		problem.setProblemNo(101L);
		problem.setQuestion("question101");
		problem.setAnswer("answer101");
		problem.setSolution("solution101");
		problem.setVariables("variables101");
		problem.setDelYn("N");
		...Repository.save(problem);
	}
	
	@Test
	public void findById() {
		Optional<Problem> oProblem = ...Repository.findById(101L);
		//Problem problem = oProblem.get();
		//Assertions.assertEquals("question101", problem.getQuestion());
		Assertions.assertTrue(oProblem.isEmpty());
	}
}

problemNo=101로 save했으니까 101로 찾으려고 했는데 자꾸 isEmpty()가 true가 나옴.

 

콘솔 확인

로그에서 정상적으로 insert된건지 봤는데 잘 된듯함.

Hibernate: 
    insert 
    into
        tablename
        (problem_no, created_at, updated_at, del_yn, answer, question, solution, variables) 
    values
        (default, ?, ?, ?, ?, ?, ?, ?)

 

test DB설정문제?

설정문젠가 싶었음. h2연결이 안되고 다른DB에 연결됐나? 이거도 잘 된듯함..

...
Starting embedded database: url='jdbc:h2:mem:670a70df-e8a9-40ba-ae76-5c7abf9b2760;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'
...

 

그러다..

insert로그를 보던 중...default? problem_no에 default? 101로 저장했는데?

Problem vo를 다시 살펴봤음. PK인 problemNo는 auto_increment로 했지. 

	...
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long problemNo; /*문제번호*/
	...

그럼 101로 저장했었어도 'default'로 insert됐으니 1로 insert 됐겠네?

 

다시 1로 찾아봄

찾았다.

 

mongoDB할때

mongoDB는 auto_increment가 없으니까 save할때 PK를 직접 지정했었음.

101로 save했으면 101로 찾아짐.