尽管经过测试,Jacoco 0.8.0 在所有 switch 案例中标记 throw 和 break
Jacoco 0.8.0 flagging throw and break in all switch cases despite tests
我在 "Jacoco 0.8.0"。我有一个 switch 语句,其中包含针对所有情况的测试。
Jacoco 在 switch 语句中标记了每种情况下的 throw 和 break。默认大小写和中断未标记。为什么要标记这些?
我环顾四周,发现像这样的帖子说以前的版本没有 switch 语句的过滤器:
但我的 运行 0.8.0 是在这个修复之后,问题略有不同。
MRE:
public class MyClass{
public void myMethod(String let) {
switch (let) {
case "A":
throw new Exception();
break;
default:
break;
}
}
}
每个测试:
@Test(expected = Exception.class)
public void testMyMethodA() {
MyClass class = new MyClass();
class.myMethod("A");
}
@Test(expected = Exception.class)
public void testMyMethodDefault() {
MyClass class = new MyClass();
class.myMethod("Z");
}
标志示例:
public class MyClass{
public void myMethod(String let) {
[YELLOW] switch (let) {
case "A":
[RED] throw new Exception();
[RED] break;
default:
break;
}
}
}
Jacoco 将 throw 语句和 break 标记为未经测试。它将开关标记为部分测试。我希望涵盖这些内容。
首先是你的MRE
public class MyClass{
public void myMethod(String let) {
switch (let) {
case "A":
throw new Exception();
break;
default:
break;
}
}
}
无法编译
javac --version
javac 11.0.3
由于以下错误
javac MyClass.java
MyClass.java:7: error: unreachable statement
break;
^
MyClass.java:6: error: unreported exception Exception; must be caught or declared to be thrown
throw new Exception();
^
2 errors
如果你看一下 JaCoCo homepage,你会注意到 0.8.0 已经快两年了,最新版本是 0.8.4
并且 JaCoCo 更新日志位于页面 https://www.jacoco.org/jacoco/trunk/doc/changes.html 的通常位置包含
Release 0.8.2 (2018/08/21)
- Part of bytecode that javac generates for
switch
statement on java.lang.String
values with a small number cases is now correctly filtered out during generation of report (GitHub #730).
以便更正示例
class Example {
public void myMethod(String let) {
switch (let) {
case "A":
throw new RuntimeException();
default:
break;
}
}
public static void main(String[] args) {
for (String s : new String[]{"A", "B"}) {
try {
new Example().myMethod(s);
} catch (Exception ignore) {
}
}
}
}
JaCoCo 0.8.4 生成以下预期报告
javac Example.java -d classes
java -javaagent:jacoco-0.8.4/lib/jacocoagent.jar -cp classes Example
java -jar jacoco-0.8.4/lib/jacococli.jar report \
jacoco.exec \
--classfiles classes \
--sourcefiles . \
--html report
根据经验和引用 JaCoCo release announcements
as always we recommend you to use latest released version
我在 "Jacoco 0.8.0"。我有一个 switch 语句,其中包含针对所有情况的测试。 Jacoco 在 switch 语句中标记了每种情况下的 throw 和 break。默认大小写和中断未标记。为什么要标记这些?
我环顾四周,发现像这样的帖子说以前的版本没有 switch 语句的过滤器:
但我的 运行 0.8.0 是在这个修复之后,问题略有不同。
MRE:
public class MyClass{
public void myMethod(String let) {
switch (let) {
case "A":
throw new Exception();
break;
default:
break;
}
}
}
每个测试:
@Test(expected = Exception.class)
public void testMyMethodA() {
MyClass class = new MyClass();
class.myMethod("A");
}
@Test(expected = Exception.class)
public void testMyMethodDefault() {
MyClass class = new MyClass();
class.myMethod("Z");
}
标志示例:
public class MyClass{
public void myMethod(String let) {
[YELLOW] switch (let) {
case "A":
[RED] throw new Exception();
[RED] break;
default:
break;
}
}
}
Jacoco 将 throw 语句和 break 标记为未经测试。它将开关标记为部分测试。我希望涵盖这些内容。
首先是你的MRE
public class MyClass{
public void myMethod(String let) {
switch (let) {
case "A":
throw new Exception();
break;
default:
break;
}
}
}
无法编译
javac --version
javac 11.0.3
由于以下错误
javac MyClass.java
MyClass.java:7: error: unreachable statement
break;
^
MyClass.java:6: error: unreported exception Exception; must be caught or declared to be thrown
throw new Exception();
^
2 errors
如果你看一下 JaCoCo homepage,你会注意到 0.8.0 已经快两年了,最新版本是 0.8.4
并且 JaCoCo 更新日志位于页面 https://www.jacoco.org/jacoco/trunk/doc/changes.html 的通常位置包含
Release 0.8.2 (2018/08/21)
- Part of bytecode that javac generates for
switch
statement onjava.lang.String
values with a small number cases is now correctly filtered out during generation of report (GitHub #730).
以便更正示例
class Example {
public void myMethod(String let) {
switch (let) {
case "A":
throw new RuntimeException();
default:
break;
}
}
public static void main(String[] args) {
for (String s : new String[]{"A", "B"}) {
try {
new Example().myMethod(s);
} catch (Exception ignore) {
}
}
}
}
JaCoCo 0.8.4 生成以下预期报告
javac Example.java -d classes
java -javaagent:jacoco-0.8.4/lib/jacocoagent.jar -cp classes Example
java -jar jacoco-0.8.4/lib/jacococli.jar report \
jacoco.exec \
--classfiles classes \
--sourcefiles . \
--html report
根据经验和引用 JaCoCo release announcements
as always we recommend you to use latest released version