0

我有一个片段如下

public void setTarget(String target) throws TargetException{
   if(target = null){
      throw new TargetException();
   }
   this.target = target;
}

public void getTarget(){
   return this.target;
}

我正在对上面的代码片段进行单元测试

@Test(expected = TargetException.class)
public void testTargetSetting() throws TargetException{
   //For coverage of code in if loop
   String target = null;
   MyBean.setTarget(target);
   //For coverage of code in else loop
   target="abc";
   MyBean.setTarget(target);
}

现在上面代码的问题是要测试的类的代码覆盖率显示为 100%,即方法 setTarget。它同时出现在 if 和 else 块中。但是没有覆盖测试类方法即testTargetSetting 的覆盖范围。它始终显示为红色。

我正在使用 Emma 进行代码覆盖。知道如何满足实际类方法和测试类方法的代码覆盖率。

注意:上面给出的代码仅用于说明。

4

2 回答 2

2

要覆盖测试类,您必须为您的测试类编写一个测试类。要覆盖该类,您必须为您的测试类编写一个测试类。

简单地说,像 Emma 这样的工具并不是为了显示测试类的覆盖率。他们使用您的测试课程来显示您的常规课程的覆盖率。

于 2012-03-12T14:52:33.580 回答
1

好吧,您的 test-Method 没有经过完全测试,因为您在另一个测试之前运行了引发异常的测试。您的测试框架预计会出现异常,因此测试不会失败。然而,线条

target="abc";
MyBean.setTarget(target);

不被执行。

三个额外的想法:

  • 一种测试方法中有两个测试用例 - 你应该有一个测试异常的测试方法和一个测试快乐路径的测试方法
  • 正如 spookyjon 的回答中提到的,代码覆盖率工具通常不用于检查测试方法的覆盖率。
  • 如果异常之后的代码会运行,您将实现覆盖。但是由于没有断言,除了没有发生意外异常的事实之外,您实际上不会测试任何东西。没有断言的测试并不是特别有意义。
于 2012-03-12T15:06:33.527 回答