기존 Junit 기반 테스트에서
요즘은 kotest라는 멋지고 Mz한 테스팅 프레임워크를 사용해서
테스트를 짤 수 있다고 합니다.
함께 보시죠
app gradle에 해당 의존성을 추가해줍니다.
testImplementation("io.kotest:kotest-runner-junit5:5.5.0")
testImplementation("io.kotest:kotest-assertions-core:5.5.0")
testImplementation("io.kotest:kotest-property:5.5.0")
settings > plugins > marketplace 에서 kotest를 검색 후 설치해줍니다.
Junit 기반
internal class RepositoryTest {
private val dispatcher = StandardTestDispatcher()
private val testScope = TestScope(dispatcher)
private val repository: Repository = RepositoryImpl(TestNetworkProvider.service)
@Before
fun setUp() {
MockKAnnotations.init(this)
Dispatchers.setMain(dispatcher)
}
@After
fun tearDown() {
Dispatchers.resetMain()
}
@Test
fun `when request 10 feeds, get 10 feeds`() =
testScope.runTest {
// Given
val result = 10
val inc = "name,picture,email"
// when
val testResult = repository.load(result, inc) as ApiResponse.Success
// then
assertEquals(10, testResult.data?.results?.size)
}
}
Kotest 기반 (plugin 이슈로 인한 test double 사용)
class RepositoryTest : BehaviorSpec({
Given("result is 10, inc is name and picture and email") {
val repository = Repository(TestNetworkProvider.service)
val result = 10
val inc = "name,picture,email"
When("request 10 feeds") {
val testResult = repository.load(result, inc) as TestApiResponse.Success
Then("should return exactly 10 feeds") {
testResult.data?.results?.size shouldBe 10
}
}
}
})
어떤가요?
기존 Junit에서 kotest로 옮겨봤는데 굉장히 깔끔해 보이지않나요?
프레임워크 자체에서 BDD(given-when-then) 스타일을 사용할 수 있어서
굉장히 가독성이 좋아집니다.
현재 kotest에서 plugin 이슈가 있어서
테스트 폴더 밖에 있는 실제 클래스등을 참조 하지 못합니다.
따라서 아직까진 Junit을 써야할 것 같네요
물론 test 폴더에 있는 test double들만 사용한다 가정하면
충분히 사용가능합니다.
차세대 테스팅 프레임워크 kotest 어떠신가요?
아직 까진 맛보기에 불과하지만
언젠간 Junit을 밀어내고 주류가 되면 좋겠네요