2013-07-22 48 views
0

我给出了一个java代码,我必须编写测试用例,以便可以获得100%的覆盖率。但是,给出的代码是这样写的,即“if”语句之一永远不会成立。我们不能更改代码,但我们仍需要实现100%的代码覆盖率。怎么做。该工具仅帮手,其在帖子中提及了,但是如果无论如何我们需要做that.The码是什么,`覆盖无法访问的代码的JUnit

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.....}

回答

0

这里通常的做法是确保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"; 
    } 
} 
+0

但尽管如此,覆盖原来的基类的比例不会随着这种说法仍是基类 –

+0

嘛可达,另一种方法是希望'determineTriangleType'具有*取消*错误中的错误被测方法。在这种情况下,您可以通过等边三角形并获得预期结果。 – user268396