JUnit 覆盖无法访问的代码
Posted
技术标签:
【中文标题】JUnit 覆盖无法访问的代码【英文标题】:JUnit covering unreachable code 【发布时间】:2013-07-21 09:52:44 【问题描述】:我得到了一个 java 代码,我必须编写测试用例才能获得 100% 的覆盖率。但是,给出的代码是以这样一种方式编写的,即“if”语句之一永远不会是真的。我们无法更改代码,仍然必须实现 100% 的代码覆盖率。怎么做。该工具只是助手,在其中一篇文章中提到过,但是如果我们需要这样做怎么办。代码是-`
public double getArea(int side1, int side2, int side3 )
String type = determineTriangleType(side1+"", side2+".1", side3+"");
double area;
//Different way of calculation for Equilateral
if(type.equals("Equilateral"))
area =(Math.sqrt(3)/4)*side1 *side2;
` else.....
我无法给出上面“如果”为真的测试用例。
determineTriangleType 方法是public String determineTriangleType(String side1, String side2, String side3 ) ......Some Processing.....
【问题讨论】:
【参考方案1】:这里通常的方法是确保type
是所需的值。为此,您需要更改 determineTriangleType
以返回所需的类型。
这就是模拟对象的用武之地。这个想法是扩展被测 Java 类并覆盖 determineTriangleType
以在派生实现中无条件地返回正确的值。然后在派生类的实例上调用要测试的方法,现在方法的 if 语句将执行。
public class DerivedToCheckIf extends BaseClass
@Override
public String determineTriangleType(String side1, String side2, String side3)
// call to super implementation may not be required
// if the method does not change object state which affects the method under test
super.determineTriangleType(side1, side2, side3);
return "Equilateral";
【讨论】:
但是,原始基类中的覆盖百分比不会改变,因为该语句在基类中仍然无法访问 嗯,另一种选择是希望determineTriangleType
有一个错误,它取消被测方法中的错误。在这种情况下,您可以传入一个等边三角形并获得预期的结果。以上是关于JUnit 覆盖无法访问的代码的主要内容,如果未能解决你的问题,请参考以下文章