개요
- Testing 프레임워크로 Kotest 에 대해 소개하고, 간단한 test 코드를 작성해본다.
Mockk
library를 통해 mocking 객체를 생성 할 수 있다.
특징
multi-platform
JVM, Javascript and Native
을 지원한다.- Gradle 4.6 이상에서,
useJUnitPlatform()
을 추가한 다음 Kotest junit5 depencency를 추가하기만 하면 된다.
코틀린 DSL 지원
- 기존에 사용하던
Junit과 AssertJ, Mockito
를 사용하면 Mocking이나 Assertion 과정에서 코틀린 DSL 을 활용할 수 있다. Kotest
Mockk
와 같은 도구들을 사용하면 아래처럼 코틀린 DSL과 Infix를 사용해 코틀린 스타일의 테스트 코드를 작성할 수 있다.
- 기존에 사용하던
다양한, Kotest Testing Styles
Fun Spec
: ScalaTestDescribe Spec
: Javascript frameworks and RSpecShould Spec
: A Kotest originalString Spec
: A Kotest originalBehavior Spec
: BDD frameworksFree Spec
: ScalaTestWord Spec
: ScalaTestFeature Spec
: CucumberExpect Spec
: A Kotest originalAnnotation Spec
: JUnit
Conditional tests with enabled flags
- Kotest는 테스트에 구성 플래그를 설정하여 테스트를 비활성화할 수 있도록 지원한다.
Spec ordering
- 기본적으로 Spec 클래스의 순서는 정의되어 있지 않다.
@Order( )
로 순서를 지정할 수 있다.
1 2 3 4
@Order(1) class FooTest : FunSpec() { } @Order(0) class BarTest: FunSpec() {}
Assertion
- Assertion 모듈은 상태를 테스트하는 함수의 모음이다.
- Kotest는 이러한 유형의 상태 Assertion 함수를
Matcher
라고 부른다.
Core Matchers
kotest-assertions-core module
에서 제공한다.
General | |
---|---|
obj.shouldBe(other) | General purpose assertion that the given obj and other are both equal |
expr.shouldBeTrue() | Convenience assertion that the expression is true. Equivalent to expr.shouldBe(true) |
expr.shouldBeFalse() | Convenience assertion that the expression is false. Equivalent to expr.shouldBe(false) |
shouldThrow<T> { block } | General purpose construct that asserts that the block throws a T Throwable or a subtype of T |
shouldThrowExactly<T> { block } | General purpose construct that asserts that the block throws exactly T |
shouldThrowAny { block } | General purpose construct that asserts that the block throws a Throwable of any type |
shouldThrowMessage(message) { block } | Verifies that a block of code throws any Throwable with given message |
Inspectors
Inspectors를 사용하면 Collection
요소를 테스트할 수 있다.
forAll
: asserts every element passes the assertionsforNone
: asserts no element passesforOne
: asserts only a single element passedforAtMostOne
: asserts that either 0 or 1 elements passforAtLeastOne
: asserts that 1 or more elements passedforAtLeast(k)
: is a generalization that k or more elements passedforAtMost(k)
: is a generalization that k or fewer elements passedforAny
: is an alias forforAtLeastOne
forSome
: asserts that between 1 and n-1 elements passed. Ie, if NONE pass or ALL pass then we consider that a failure.forExactly(k)
: is a generalization that exactly k elements passed. This is the basis for the implementation of the other methods
Setting
libs.versions.toml
|
|
testing을 수행하는 모듈의 build.gradle.kts
|
|
~~test-result.xml
를 얻기 위한 코드
|
|
구현한 Test 코드
Coroutine Flow throttleFirst 확장 함수 Unit Test
|
|
GetPlaylistsUseCase Unit Test, Mocking 사용
|
|