Jakich technologii użyć do unit testów na Anroidzie?

Jakich technologii użyć do stworzenia dobrych testów w projekcie androidowym? Jest sporo ciekawych frameworków, lecz warto skupić się na tych, które mają pełne wsparcie Kotlina – standardowego języka programowania używanego na Androidzie.

Jakich technologii użyć do 
unit testów na Anroidzie?



We wpisie znajdziesz kilka bibliotek, po które sięgam najczęściej.

Do tworzenia struktury testów... jUnit5!

class SomeTest{
  @Test
  @DisplayName("it should pass")
  fun it_should_pass(){
    //
  }
}

Następca jUnit4 - jednego z najczęściej używanych frameworków do testowania na JVM.

Jak to dodać do projektu?

Do build.gradle dodaj...

android{
  testOptions {
    unitTests.all {
      useJUnitPlatform()
    }
  }
}

dependencies {
	testImplementation "org.junit.jupiter:junit-jupiter:5.8.0"
}

I później w klasie testowej upewnij się, że importujesz odpowiedni package, czyli: org.junit.jupiter.api.Test

jak zagnieżdżać testy w jUnit5 dowiesz się tutaj

Alternatywa do jUnit, czyli Kotest!

class SomeTest: StringSpec({
  "it should pass"{
    // 
  }
})

Kotestowy DSL, czyli domain specific language pozwala nadefiniowanie test case'ów wstylu specyfikacji.

Jak to dodać do projektu? Podobnie jak w integracji jUnit5, musimy okreslić, że chcemy używać JUnitPlatform:

android{
  testOptions {
    unitTests.all {
      useJUnitPlatform()
    }
  }
}

dependencies {
  testImplementation 'io.kotest:kotest-runner-junit5:5.0.0'

}

a o tym jak z Kotestem radzić sobie przy parametrycznych testach dowiesz się tutaj

Do mockowania... MockK!

val dependency: Controller = mockk{
  every { messageReceived(any()) } returns emptyMap()
}

Biblioteka do mockowania dedykowana Kotlinowi. Ma wbudowany support do Kotlin Coroutines.

Jak to dodać do projektu? W build.gradle:

dependencies {
   testImplementation 'io.mockk:mockk:1.12.1'
}

więcej o MockK przeczytasz tutaj

Do asercji... Strikt!

Ciekawa biblioteka – dostarcza od groma metod do budowania złożonych asercji, a jednocześnie renderuje czytelne raporty błędów.


val text = "Android Unit Testy"

expectThat(text)
  .hasLength(18)
  .matches(Regex("[\\w\\s]+"))
  .startsWith("A")

Jak dodać Strikt do projektu?
W build.gradle:

dependencies {
  testImplementation "io.strikt:strikt-core:0.33.0"
}

więcej o bibliotece Strikt dowiesz się pod tym linkiem


Same frameworki to nie wszystko. Trzeba też wiedzieć jak je skutecznie wykorzystywać.
Możesz się tego nauczyć. Weź udział w kursie unit testów i ogarnij najlepsze praktyki testowaniu na Androidzie.Pobierz bezpłatny fragment programu Android Unit Testy.
Na tego maila dostaniesz informację o otwarciu drugiej edycji kursu. Wyślę Ci również fragment kursu - lekcję o praktycznym zastosowaniu Mockito-Kotlin.

Jarosław Michalik

Jarosław Michalik

Programista | Bloger | Muzyk Pomagam się ogarnąć w internetowych technologiach