Kotest 테스트 검증 단언문(Assertions)

테스트에서는 특정 조건이 참인지 확인하기 위해 Assertion을 사용한다. Kotlin에서는 Kotest를 통해 다양한 종류의 Assertion과 Matchers를 활용할 수 있다. 이번 섹션에서는 Assertion과 Matchers에 대해 자세히 살펴보겠다.

Kotest는 독립적으로 사용할 수 있는 여러 하위 프로젝트로 나눠진다. 이러한 하위 프로젝트 중 하나는 포괄적인 단언문(assertion)/매처(matchers) 지원이다. 이는 Kotest 테스트 프레임워크 또는 JUnit 또는 Spock과 같은 다른 테스트 프레임워크와 함께 사용할 수 있다.

단언문 모듈의 핵심 기능은 상태를 테스트하는 함수이다. Kotest는 이러한 유형의 상태 단언문 함수를 매처(Matchers)라고 부른다. 코어 매처와 서드파티 라이브러리용 매처가 있다.

예외 테스트, 비결정적 코드를 테스트하는 데 도움이 되는 함수, 컬렉션을 위한 인스펙터, 단언문을 그룹화하는 소프트 단언문 등 테스트 작성을 위한 다른 많은 유틸리티도 있다.

다양한 매처

예를 들어, 변수에 예상값이 있다고 확인하려면 shouldBe 함수를 사용할 수 있다.

name shouldBe "devkuma"

문자열의 길이를 테스트하는 str.shouldHaveLength(10), 특정 파일이 디렉터리를 가리키는지 테스트하는 file.shouldBeDirectory()와 같은 다양한 특정 시나리오를 위한 매처뿐만 아니라 shouldBe와 같은 범용 매처도 있다. 이 함수는 infix 변형과 일반 변형이 모두 제공된다.

예를 들어, 단언문은 일반적으로 연쇄적으로 연결될 수 있다:

"substring".shouldContain("str")
           .shouldBeLowerCase()

myImageFile.shouldHaveExtension(".jpg")
           .shouldStartWith("https")

여러 모듈에 걸쳐 350개 이상의 매처가 있다. 여기에서 모든 매처에 대해 확인바란다.

단서(Clues)

때로는 실패한 단언문에 무엇이 잘못되었는지 정확히 알 수 있는 충분한 정보가 포함되어 있지 않을 수 있다.

예를 들어, 다음과 같이 검증을 한다고 하자.

user.name shouldNotBe null

이 검증이 실패하면 단순히 다음과 같이 출력 될 것이다.

<null> should not equal <null>

이는 특별히 도움이 되지 않는다. 단서를 사용하여 실패 메시지에 추가 컨텍스트를 추가할 수 있다.

인스펙터(Inspectors)

인스펙터를 사용하면 컬렉션의 요소를 테스트하고 통과할 것으로 예상되는 요소의 수량(all, none, exactly k 등)을 지정할 수 있다.

예를 들어, 아래와 같이 mylist를 3개를 확인할 수 있다.

mylist.forExactly(3) {
    it.city shouldBe "Chicago"
}

여기에서 인스펙터에 대해 확인바란다.

사용자 지정 매처

Matcher<T> 인터페이스를 확장하여 자신만의 매처를 쉽게 추가할 수 있다. 여기서 T는 일치시키려는 유형이다. 커스텀 매처는 기존 매처를 구성하거나 완전히 독립적으로 사용할 수 있다.

전체 작업 예제를 참조하라.


참고

Assertions | Kotest




최종 수정 : 2024-04-14