Optionalを使うとカバレッジ率が上がる!
カバレッジ率について実験してみる
カバレッジ率が微妙なコード
public class Hoge { public static String getOrNull(String str) { if(str == null) { return "null"; } return str; } }
HogeTest.java
public class HogeTest { @Test public void getOrNull() { assert Hoge.getOrNull("hello") == "hello"; } }
このテストはgetOrNull()にnullを入れるケースがないのでカバレッジ率は100%になりません
実際に実行するとカバレッジ率は66%になりました
Optionalで書いてみる
プロダクトコードでnullチェックするのはかっこ悪いのでOptionalで書いてみます
Hoge.java
public class Hoge { public static String getOrNull(Optional<String> str) { return str.orElse("null"); } }
HogeTest.java
public class HogeTest { @Test public void getOrNull() { assert Hoge.getOrNull(Optional.of("hello")) == "hello"; } }
このテストも先ほどと同じくnullのケースがありませんが
カバレッジ率を測ってみると
100%!!!
うげ。。
Optionalが絡むとカバレッジ率が信用ならない
どうすんのこれ。。
orElseGet()にしてみる
orElseGet()なら引数が関数なのでちゃんと実行をカウントしてくれそうなのでやってみる
Hoge.java
public class Hoge { public static String getOrNull(Optional<String> str) { return str.orElseGet(()->"null"); } }
実行するとカバレッジ率が50%になった!
まとめ
モダンな書き方はカバレッジ率との相性が悪い
まぁ関数型を使うようにすれば良くはなるけど...
つらい...