JaCoCo进行程序测试的覆盖范围

时间:2018-11-28 18:50:36

标签: java unit-testing testing jacoco

我正在使用JaCoCo测试一个简短的程序,并且我几乎达到了100%的覆盖率,除了这是我似乎无法测试的唯一陈述,我可以编写什么测试套件来覆盖整个程序?下面是代码。 Here is a screenshot of my JaCoCo report

Pt. 2

2 个答案:

答案 0 :(得分:0)

我不确定您是否真的不能达到100%(比您更棘手的情况,这几乎是不可能解决的),但是在那种情况下,您必须简单地调用main少于3个参数:

IglooScore.main(new String[0]);

这等效于调用java -jar blabla.jar IglooScore.main

IglooScore.main(null);

当JRE启动程序时,第二个永远不会出现,但是如果以编程方式(例如从测试中)调用main,则可能会发生这种情况。

请注意,您的情况很简单:

if (args.length != 3)

如果为红色,则意味着您必须检查条件:

  • 测试通过了argsargs.length == 3匹配的args(已发现)
  • 测试通过了args.length == 3 not 匹配if (args == null || args.length != 3) (未涵盖)的

您可能还会遇到这种情况:

args

这意味着您必须:

  • 测试通过了null的{​​{1}}
  • 在测试中通过的args不为空且匹配的args.length == 3
  • 测试通过了args不为null和 not 匹配args.length == 3
  • 的测试

在更坏的情况下,可能有助于将表达式拆分成几行以显示未覆盖的行,例如:

if (args == null ||
    args.length != 3)

答案 1 :(得分:0)

仅当您使用小于或大于main() 的参数调用3时,将情况添加到测试类中:

String [] testInput = new String[2];
testInput[0] = "invalidInput"; // don't worry this wouldn't reach the point to throw ParseException
testInput[1] = "invalidInputAgain";
new IglooScore1().main(testInput); // line of code to test