Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin でテストを書く

numa08
February 07, 2018

Kotlin でテストを書く

DroidKaigi2018 の @srym のハンズオンセッションでで利用をしてもらう資料です

https://droidkaigi.jp/2018/timetable/?session=16942

numa08

February 07, 2018
Tweet

More Decks by numa08

Other Decks in Technology

Transcript

  1. jvm で実行するテスト ソースコードの置き場: 開発をしている端末(パソコン)の jvm で実行される 起動や動作がAndroid の端末と比べて速い Android のAPI

    を利用することはデフォルトではできない。外部の ライブラリを利用すればできる 端末依存、機種依存のバグの発見は難しい 画面遷移のテストができない
  2. app/build.gradle android { defaultConfig { testInstrumentationRunner( "android.support.test.runner.AndroidJUnitRunner") } testOptions {

    unitTests.returnDefaultValues = true } } dependencies { // 省略 testImplements 'junit:junit:4.12' }
  3. app/build.gradle : Android でテストを実行するときの テストランナー : jvm でテストするときに Android のライブラリに

    default value を返すようにする jUnit: 単体テストを実行するためのフレームワーク、ライブラリ。 kotlin でテストを書くときにもこれを使う 以外はプロジェクトを作ったときに勝手に追 加されているはず。
  4. テストの書き方 に追加する import org.hamcrest.CoreMatchers.`is` import org.junit.Assert.assertThat import org.junit.Test class CalculatorTest

    { @Test // 1 fun 足 算 () { // 2 val a = 1 val b = 2 val sum = a + b assertThat(sum, `is`(3)) // 3 } }
  5. テストの書き方 1. テストで実行をするメソッドには アノテーションを付ける 2. テストメソッドの名前は再利用性よりも分かりやすさを優先す る。ここでは、日本語を使うことで何をテストするのかがひと目 で分かるようにしている 3. 値のチェックは

    メソッドを利用。第1 引数に実際の 値、第2 引数には「どういう状態であって欲しいのか」を意味す る をパラメータに与える Matcher には様々な種類がある。 は第1 引数の値と等しいこと を確認する ちなみに は kotlin の予約語なので で囲む必 要がある
  6. テストを書けるようにする class UntestableClass { fun findUserByID(id: Long): User? { val

    users = getUserFromInternet() // 1 return users.find { it.id == id } } }
  7. テストを書けるようにする interface UserAPI { fun getUserFromInternet(): List<User> } class TestableClass(val

    api: UserAPI) { // 1 fun findUserByID(id: Long): User? { val users = api.getUserFromInternet() return users.find { it.id == id } } }