SpringBoot Test

gotcha!!·2023년 9월 21일
0

SpringBoot

목록 보기
6/7

spring boot test 케이스를 간단히 작성하면서 겪었던 상황에 대해 적어보려고 한다.

junit4, junit5

실제로 영한님 강의를 보면서 영한님은 junit4 테스트케이스를 작성하였다.
나는 junit4가 아닌 junit5로 작성했는데 차이점이 있었다.


Runwith, ExtendWith

처음에 무작정 따라하다 보니 이거 왜 안되지? 라는 상황이 있었다.

@SprignBootTest
@RunwWith(SpringRunner.class)
class MemberRepositoryTest{

.
.
.
}

여기서 RunWith에서 클래스를 찾을 수 없다는 에러였고, 구글링을 깔짝해보니
junit5에서는 RunWith 대신 ExtendWith(SpringExtension.class)를 사용한다는 것이다.
실제로 해당 어노테이션을 사용하였고, 문제는 극뽁


No tests found for given includes:

테스트 멤버를 돌리는 도중 자꾸 No tests found for given includes:... 에러가 발생하였다.
왜 그러나 살펴보니 스프링 부트 2.1.x 버전 말고 2.2.x 이상 버전을 사용하게 되면 Junit5가 설치되는데 이때는 build.gradle에 추가해야하는 내용이 있었다.

 test {
        useJUnitPlatform()
}

해당 구문을 추가해주니 에러가 해결됐다.


@Transactional

Rollback(false)

테스트 멤버 도중 내가 인서트 하는 쿼리를 보고싶은데 자꾸 그 쿼리를 볼 수 없었다.
왜 그런가 구글링을 해보니

	@Test
    @Transactional // test에 @transactional가 있으면 테스트 마지막에 rollback을 한다.
    @Rollback(value = false)
    public void testMember() throws Exception {
    .
    .
    .
    
    
    }
    

@Transactional 어노테이션에는 테스트 마지막에 rollback을 하기에 인서트 쿼리를 볼 수 없음과 동시에 데이터베이스에 데이터가 남지 않게된다.
그래서 @Rollback(false)를 남겨주니 인서트 쿼리를 볼 수 있게 되었다.


쿼리 파라미터 로그 남기기

내가 실제로 데이터를 넣는 쿼리 파라미터를 볼 수 없게 ?,? 로 insert 쿼리가 나가는 것을 보고 싶으면
application.yml에서 org.hibernate.orm.jdbc.bind: trace를 적어주면 된다

그러면 실제로

 [	Test worker] org.hibernate.SQL                        : 
    insert 
    into
        member
        (username,id) 
    values
        (?,?)
Hibernate: 
    insert 
    into
        member
        (username,id) 
    values
        (?,?)
2023-09-21T15:28:45.415+09:00 TRACE 7622 --- [    Test worker] org.hibernate.orm.jdbc.bind              : binding parameter [1] as [VARCHAR] - [memberA]
2023-09-21T15:28:45.415+09:00 TRACE 7622 --- [    Test worker] org.hibernate.orm.jdbc.bind              : binding parameter [2] as [BIGINT] - [1]

이렇게 내가 무엇을 쿼리파라미터로 넘겼는지 알 수 있다.

참고
org.hibernate.orm.jdbc.bind: trace 이건 스프링 부트 3.x, hibernate6 버전 일 때 사용한다.
스프링부트 2.x, hibernate5 버전들은 org.hibernate.type: trace를 사용하자


외부 라이브러리를 사용해서 쿼리 파라미터 보기

저렇게 파라미터를 보는 것이 아니라, 조금 더 쉽게 보기 위해서는 해당 아래 링크에 라이브러리를 사용하자

외부 라이브러리

 [	Test worker] p6spy                                    : #1695278201546 | took 0ms | statement | connection 4| url jdbc:h2:tcp://localhost/~/jpashop
insert into member (username,id) values (?,?)
insert into member (username,id) values ('memberA',1);

참고
버전 1.9.0은 스프링 부트3을 지원한다.
나는 1.9.0버전을 사용하는데 문제가 없었는데, 혹시나 문제가 있다면 1.8.1을 사용하는 것이 좋을 것 같다.

profile
ha lee :)

0개의 댓글