尽管进行了测试,Jacoco 0.8.0 仍然在所有 switch 情况下标记 throw

我正在使用“Jacoco 0.8.0”。我有一个 switch 语句,其中包含所有情况的测试。Jacoco 在 switch 语句中标记每种情况下的 throw 和 Break。默认情况下的情况和中断是未标记的。为什么要标记这些?


但我运行的是修复后的 0.8.0,问题略有不同。

再次:

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 语句和中断标记为未经测试。它将交换机标记为部分测试。我预计这些都会被涵盖。


慕的地8271018
浏览 151回答 1
1回答

紫衣仙女

首先你的 MREpublic class MyClass{    public void myMethod(String let) {           switch (let) {               case "A":                   throw new Exception();                   break;               default:                   break;           }      }}无法编译javac --versionjavac 11.0.3因为以下错误javac MyClass.javaMyClass.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包含版本0.8.2 (2018/08/21)现在,在生成报告期间,可以正确过滤掉 javac 为针对少量情况的值的switch语句生成的部分字节码(GitHub #730 )。java.lang.String所以对于更正的例子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 classesjava -javaagent:jacoco-0.8.4/lib/jacocoagent.jar -cp classes Examplejava -jar jacoco-0.8.4/lib/jacococli.jar report \    jacoco.exec \    --classfiles classes \    --sourcefiles . \    --html report
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java