티스토리 뷰

각각의 테스트를 실행하면 성공하지만, 전체 테스트를 돌리면 실패하는 이유?

: Spring Context 를 공유하기 때문

//Expected size: 2 but was: 3 in:
//[com.group.libraryapp.dto.user.response.UserResponse@69862a1,
//    com.group.libraryapp.dto.user.response.UserResponse@585718dd,
//    com.group.libraryapp.dto.user.response.UserResponse@5a644d75]
//java.lang.AssertionError:

 

생성 테스트 - 조회 테스트

1. 최초 생성 테스트 : DB에 user 데이터 1명 추가

@Test
fun saveUserTest() {
    //given
    val request = UserCreateRequest("daeun", null)

    //when
    userService.saveUser(request)

    //then
    val result = userRepository.findAll()
    assertThat(result).hasSize(1)
    assertThat(result[0].name).isEqualTo("daeun")
    assertThat(result[0].age).isNull() // platform types: type 설정해놓으면 해당 값이 nullable 인지 아닌지 알 수 없음
}

 

2. 조회 테스트에서 다시 DB에 user 데이터 2명을 추가함

@Test
fun getUsersTest() {
    //given
    userRepository.saveAll(listOf(
        User("A", 20),
        User("B", null)
    ))

    //when
    val results = userService.getUsers()

    //then
    assertThat(results).hasSize(2) // [UserResponse(), UserResponse()]
    assertThat(results).extracting("name").containsExactlyInAnyOrder("A", "B") // ["A", "B"]
    assertThat(results).extracting("age").containsExactlyInAnyOrder(20, null)
}

 

➡️ context를 공유하기 때문에 최종적으로 1+2 = 3명이 됨

그래서 테스트가 끝나면 공유 자원 DB를 비워줘야 한다!

 

 

@AfterEach

@BeforeEach

@AfterEach

JUnit5에서 테스트 할때, 해당 test class의 시작과 끝에 단 한번씩만 호출

 

@AfterEach
fun clean() {
    userRepository.deleteAll()
}
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함