본문 바로가기

IT/TDD & Test

[JUnit] 객체 타입 체크

반응형

* 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://github.com/vljh246v/TIL/blob/main/etc/junit/src/test/kotlin/com/demo/junit/day20220726/TestClassTest.kt

 

GitHub - vljh246v/TIL: Today I learned

Today I learned. Contribute to vljh246v/TIL development by creating an account on GitHub.

github.com

 

출처

* https://www.baeldung.com/java-assert-object-of-type

 

반응형