亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

盡管進行了測試,Jacoco 0.8.0 仍然在所有 switch 情況下標記 throw

盡管進行了測試,Jacoco 0.8.0 仍然在所有 switch 情況下標記 throw

慕的地8271018 2023-08-09 15:34:55
我正在使用“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 語句和中斷標記為未經測試。它將交換機標記為部分測試。我預計這些都會被涵蓋。
查看完整描述

1 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

首先你的 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

包含

版本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 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

https://img2.sycdn.imooc.com/64d341dd00015d8206300450.jpg

查看完整回答
反對 回復 2023-08-09
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號