[Android] Kotest를 이용해서 테스트를 작성해보자!

윤호이·2024년 4월 17일
0

Test

목록 보기
12/13
post-thumbnail

서론

기존 Junit 기반 테스트에서

요즘은 kotest라는 멋지고 Mz한 테스팅 프레임워크를 사용해서

테스트를 짤 수 있다고 합니다.

함께 보시죠

Kotest 의존성 설정

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")

Kotest 플러그인 설치

settings > plugins > marketplace 에서 kotest를 검색 후 설치해줍니다.

Junit -> kotest Migration 예시

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을 밀어내고 주류가 되면 좋겠네요

profile
열정은 내 삶의 방식, 꾸준함은 내 삶의 증명

0개의 댓글