728x90
필수 사용 어노테이션

class JunitTest {
companion object { //스텍틱 함수
@BeforeAll
@JvmStatic
fun beforeAll(){
println("모든 테스틑 시작 전")
}
@AfterAll
@JvmStatic
fun afterAll(){
println("모든 테스트 종료 후")
}
}
@BeforeEach
fun beforeEach() {
println("각 테스트 시작 전")
}
@AfterEach
fun afterEach() {
println("각 테스트 종료 후")
}
@Test
fun test1() {
println("테스트 1")
}
@Test
fun test2() {
println("테스트 2")
}
}
- @Test : 테스트 메서드를 지정한다. 테스트 메서드를 실행하는 과정에서 오류가 없으면 성공!
- @BeforeEach : 각 테스트 메서드가 수행되기 전에 실행되는 메서드를 지정한다.
- @AfterEach : 각 테스트가 수행된 후에 실행되는 메서드를 지정한다.
- @BeforeAll : 모든 테스트를 수행하기 전에 최초 1회 수행되는 메서드를 지정한다.
- 코틀린에서는 static 메서드가 없으므로, @JvmStatic 어노테이션을 붙여 주어야 한다.
- @AfterAll : 모든 테스트를 수행한 후, 최후 1회 수행되는 메서드를 지정한다(위와 같이 @JvmStatic 어노테이션 필수)
JUnit을 사용하도록 변경하기
import org.assertj.core.api.AssertionsForInterfaceTypes.assertThat
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
class JunitCalculatorTest {
@Test
fun addTest() {
//given
val calculator = Calculator(5)
//when
calculator.add(3)
//then
assertThat(calculator.number).isEqualTo(8) //단언문
}
@Test
fun minusTest() {
//given
val calculator = Calculator(5)
//when
calculator.minus(3)
//then
assertThat(calculator.number).isEqualTo(2)
}
@Test
fun multiplyTest() {
//given
val calculator = Calculator(5)
//when
calculator.multiply(3)
//then
assertThat(calculator.number).isEqualTo(15)
}
@Test
fun divideTest() {
//given
val calculator = Calculator(5)
//when
calculator.divide(2)
//then
assertThat(calculator.number).isEqualTo(2)
}
@Test
fun divideExceptionTest(){
//given
val calculator = Calculator(5)
//when & then
/*
val message = assertThrows<IllegalArgumentException> {
calculator.divide(0)
}.message
assertThat(message).isEqualTo("0으로 나눌 수 없습니다.")
*/
val message = assertThrows<IllegalArgumentException> {
calculator.divide(0)
}.apply {
assertThat(message).isEqualTo("0으로 나눌 수 없습니다.")
}
}
}
- 메서드 단위로 테스트 실행이 가능해지고, 클래스 단위로 테스트를 진행할 수도 있다.
- assertThat이라는 단언문이 등장하는데, 단언문은 assertThat(확인하고 싶은 값) , 뒤에 isEqualTo(기댓값)/ isTrue() 등 메서드가 붙게 된다.
- isTrue(), isFalse() : 주어진 값이 true/false인지 검증한다.
- hasSize() : 주어진 컬렉션이 size가 원하는 값인지 검증한다.
- .extracting("프로퍼티").containExactlyInAnyOrder() : 컬렉션 안의 item 중 프로퍼티 추출 후, 값을 검증한다(순서 상관 x)
- .extracting("프로퍼티").containExactly() :컬렉션 안의 item 중 프로퍼티 추출 후, 값을 검증한다(순서 상관 o)
- assertThrows<T>{ function1() } : 함수(function1)를 실행했을 때 원하는 예외가 나오는지 검증한다.
- 예외 메시지 까지 검증할 수 있다
- divideTest에서 .apply를 통해 바로 단언문을 실행할 수도 있다.
728x90
'실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기' 카테고리의 다른 글
| Ch02. Java 서버를 Kotlin 서버로 리팩토링하자 - Domain 계층 리펙토링하기 (0) | 2022.11.01 |
|---|---|
| Ch01. 도서관리 애플리케이션 리팩토링 준비하기 - JUnit5으로 Spring Boot 테스트 하기 (0) | 2022.10.29 |
| Ch01. 도서관리 애플리케이션 리팩토링 준비하기 - 수동 테스트 코드 작성하기 (0) | 2022.10.29 |
| Ch01. 도서관리 애플리케이션 리팩토링 준비하기 - 테스트 코드?! (0) | 2022.10.29 |
| Ch01. 도서관리 애플리케이션 리팩토링 준비하기 - 도서 관리 애플리케이션 이해하기 (0) | 2022.10.25 |