2013-07-22 28 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