コードカバレッジを⾒つつユニットテストを書く

 コードカバレッジを⾒つつユニットテストを書く

F46a37b9f855c245f72a07b04045216a?s=128

Tomoya Miwa

March 18, 2019
Tweet

Transcript

  1. コードカバレッジを⾒つつ ユニットテストを書く tomoya0x00 Otemachi.apk #02 #otemachi_apk

  2. About me tomoya0x00 Twitter, GitHub, Qiita Android, Embedded system, BLE/BT,

    iOS DeNA Co., Ltd. Automotive Business Unit. 前回(Otemachi.apk #01)は⾵邪で登壇できなかった
  3. みなさん、ユニットテストしてますか︖

  4. コードカバレッジは⾒てますか︖

  5. コードカバレッジとは︖

  6. コードカバレッジとは︖ ソースコードのテストされた割合 測定⼿法がいくつかある

  7. 測定⼿法、2つだけご紹介

  8. 命令網羅(C0) ソースコードの 各⽂ が実⾏されているか fun hoge(x: Int) { println("hoge") if

    (x > 0) { println("fuga") } } hoge(x = 1) だけで C0:100%
  9. 分岐網羅(C1) ソースコードの 各条件 が実⾏されているか fun hoge(x: Int) { println("hoge") if

    (x > 0) { println("fuga") } } hoge(x = 1) と hoge(x = 0) で C1:100%
  10. ユニットテスト + コードカバレッジ

  11. Why?

  12. テストコードが充分か︖ 判断基準の⼀つとして使える

  13. 例︓既存コードのリファクタリング

  14. 既存コード fun hoge(x: Int): String { if (x >= 3)

    return "many" if (x == 2) return "two" if (x == 1) return "one" if (x == 0) return "zero" return "other" }
  15. テストコードを書く @Test fun hogeTest() { assert(hoge(3) == "many") assert(hoge(2) ==

    "two") assert(hoge(1) == "one") assert(hoge(0) == "zero") }
  16. このテストコードで充分なのか・・・︖

  17. そこでコードカバレッジ

  18. コードカバレッジを計測する⽅法 Android Studio JaCoCo Other...?

  19. コードカバレッジを計測する⽅法 Android Studio JaCoCo 今回はこちら Other...?

  20. JaCoCoの準備

  21. デフォルト設定だと、 Kotlinが計測対象とならない

  22. JaCoCoの準備 arturdm/jacoco-android-gradle-plugin Issue 37 の JaCoCoの設定 を参考にすればOK ※上記の設定は build variants

    も考慮されていてステキ
  23. カバレッジ結果をみてみる

  24. カバレッジ結果をみてみる $ gradlew jacocoDebugReport 実⾏後に、 app/build/reports/jacoco/jacocoDebugReport/html/index.html を開く

  25. None
  26. None
  27. None
  28. None
  29. テストコードを⾜す @Test fun hogeTest() { assert(hoge(3) == "many") assert(hoge(2) ==

    "two") assert(hoge(1) == "one") assert(hoge(0) == "zero") assert(hoge(-1) == "other") // ★追加テストコード }
  30. None
  31. 無事、カバレッジ100%

  32. リファクタリングも安⼼

  33. Kotlinっぽくしてみる fun hoge(x: Int): String = when { x >=

    3 -> "many" x == 2 -> "two" x == 1 -> "one" x == 0 -> "zero" else -> "other" }
  34. None
  35. 補⾜ カバレッジ100%だからテストコード完璧、ではない でも、判断基準の⼀つとして使えます カバレッジ100%必達では無い テストコード書きづらいところは、⼿動で確認しても良いんです

  36. ありがとうございました︕