Java 已抛出的块的代码覆盖率
我有一个片段如下Java 已抛出的块的代码覆盖率,java,junit,emma,Java,Junit,Emma,我有一个片段如下 public void setTarget(String target) throws TargetException{ if(target = null){ throw new TargetException(); } this.target = target; } public void getTarget(){ return this.target; } 我正在对上述代码段进行单元测试 @Test(expected = Target
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块。但是测试类方法ie testTargetSetting的覆盖范围不包括在内。它总是以红色显示
我使用Emma进行代码覆盖。任何关于如何满足实际类方法和测试类方法的代码覆盖率的想法
注意:上面给出的代码仅用于说明。要覆盖测试类,您必须为测试类编写一个测试类。要覆盖该类,您必须为您的测试类的测试类编写一个测试类
简单地说,像Emma这样的工具并不是为了显示测试类的覆盖率。他们使用您的测试类来显示常规类的覆盖率。要获得测试类的覆盖率,您必须为测试类编写一个测试类。要覆盖该类,您必须为您的测试类的测试类编写一个测试类
简单地说,像Emma这样的工具并不是为了显示测试类的覆盖率。他们使用您的测试类来显示常规类的覆盖率。好吧,您的测试方法没有被完全测试,因为您运行的测试在其他测试之前抛出异常。您的测试框架需要异常,因此测试不会失败。然而,这些线
target="abc";
MyBean.setTarget(target);
没有被执行
还有三个想法:
- 一个测试方法中有两个测试用例——您应该有一个测试异常的测试方法和一个测试快乐路径的测试方法
- 正如spookyjon在回答中提到的,代码覆盖率工具通常不用于检查测试方法的覆盖率
- 如果异常后的代码将运行,则可以实现覆盖率。但是因为没有断言,所以除了没有发生意外异常这一事实之外,您实际上不会测试任何东西。没有断言的测试不是特别有意义
target="abc";
MyBean.setTarget(target);
没有被执行
还有三个想法:
- 一个测试方法中有两个测试用例——您应该有一个测试异常的测试方法和一个测试快乐路径的测试方法
- 正如spookyjon在回答中提到的,代码覆盖率工具通常不用于检查测试方法的覆盖率
- 如果异常后的代码将运行,则可以实现覆盖率。但是因为没有断言,所以除了没有发生意外异常这一事实之外,您实际上不会测试任何东西。没有断言的测试不是特别有意义