変更ログに記載されているように Java 8 をサポートする Jacoco 0.7.1 を使用する EclEmma 2.3.1.201405111647 (最新) を使用して、Eclipse Luna の下に Java プロジェクトがあります。
「バージョン 2.3.1 (2014/05/11)
Fixed ASM 5.0.1 dependency conflicts with new ASM bundles in Eclipse 4.4 (GitHub #83). Upgrade to JaCoCo 0.7.1 for full Java 8 support.
私は今、次のtoStringを持っています:
@Override
public String toString() {
// [BLOCK0]
if (0 == value) {
return "0B";
}
// [BLOCK1]
final MutableLong val = new MutableLong(value);
final StringBuilder sb = new StringBuilder();
// [BLOCK2]
Arrays.asList(TERA_BYTES, GIGA_BYTES, MEGA_BYTES, KILO_BYTES, BYTES).forEach(unit -> {
// [BLOCK3]
long divider = unit.toBytes(1);
long n = val.longValue() / divider;
if (0 != n) {
sb.append(n).append(unit.getUnitCharacter());
val.subtract(n * divider);
}
});
// [BLOCK4]
return sb.toString();
}
Junit テストは 100% カバーされることがわかっているので、ここでは行いません。appendToString
ラムバ式をメソッドに移動forEach
し、for-each に置き換えることで証明できますfor (V value : Iterable<V>)
。
結果は、「Junit テストとしてのカバレッジ」を実行すると、次のようになります。
- BLOCK0 はすべて緑色です
- BLOCK1 はすべて緑色です
- BLOCK2 は緑色で、
forEach(unit -> {
- BLOCK3 は白 (無視された行のように)
- BLOCK4 はすべて緑色です。
Jacoco が lambda のカバレッジを検出できない理由を誰かが説明してくれますか?