반응형
* JUnit5 사용
* 반환된 객체의 타입을 체크해야할 경우가 있다.
1. 시나리오
* 나뭇잎 타입에따라 나무를 분류한다.
* 올바른 유형을 반환하는지 검사할 필요가 있다.
class TestClass {
fun sortTree(name: String): Tree {
val deciduous = listOf("Beech", "Birch", "Ash", "Whitebeam", "Hornbeam", "Hazel & Willow")
val evergreen = listOf("Cedar", "Holly", "Laurel", "Olive", "Pine")
return if(deciduous.contains(name)) {
Deciduous(name)
} else if(evergreen.contains(name)) {
Evergreen(name)
} else {
throw RuntimeException("Tree could not be classified")
}
}
}
open class Tree(name: String){}
class Deciduous(name: String): Tree(name) {}
class Evergreen(name: String): Tree(name) {}
2. 테스트
2.1. JUnit5로 테스트하기
* assertEquals메서드를 사용해서 객체의 클래스가 올바른 타입인지 확인할 수 있다.
@Test
fun sortTreeShouldReturnEvergreen_WhenPineIsPassed_UseJUnit5() {
val tree = TestClass().sortTree("Pine")
org.junit.jupiter.api.Assertions.assertEquals(tree.javaClass, Evergreen::class.java)
}
2.2. Hamcrest로 테스트하기
* assertThat과 instanceOf 메서드를 사용할 수 있다.
@Test
fun sortTreeShouldReturnEvergreen_WhenPineIsPassed_UseHamcrest() {
val tree = TestClass().sortTree("Pine")
org.hamcrest.MatcherAssert.assertThat(tree, org.hamcrest.Matchers.instanceOf(Evergreen::class.java))
}
* isA 메서드도 사용 가능하다.
@Test
fun sortTreeShouldReturnEvergreen_WhenPineIsPassed_UseHamcrest() {
val tree = TestClass().sortTree("Pine")
org.hamcrest.MatcherAssert.assertThat(tree, org.hamcrest.Matchers.isA(Evergreen::class.java))
}
2.3. AssertJ로 테스트하기
* AssertJ Core 라이브러리의 isExactlyInstanceOf 메서드를 사용할 수 있다.
@Test
fun sortTreeShouldReturnEvergreen_WhenPineIsPassed_UseAssertJ() {
val tree = TestClass().sortTree("Pine")
org.assertj.core.api.Assertions.assertThat(tree).isExactlyInstanceOf(Evergreen::class.java)
}
* 또다른 방법으로는 hasSameClassAs 메서드를 사용할 수 있다.
@Test
fun sortTreeShouldReturnEvergreen_WhenPineIsPassed_UseAssertJ() {
val tree = TestClass().sortTree("Pine")
org.assertj.core.api.Assertions.assertThat(tree).hasSameClassAs(Evergreen("Pine"))
}
소스코드
출처
* https://www.baeldung.com/java-assert-object-of-type
반응형
'IT > TDD & Test' 카테고리의 다른 글
[JUnit] 파일 & 리소스 (/src/test/resources) 가져오기 (0) | 2022.08.01 |
---|---|
[JUnit] Dynamic Tests (0) | 2022.07.30 |
[JUnit] JUnit에서 현재 실행 중인 테스트 이름 가지고 오기 (0) | 2022.07.25 |
RestClientTest를 알아보자~ (0) | 2021.03.27 |
Controller Test를 해보자~! (0) | 2021.03.21 |