JUnit, охватывающий недоступный код
Мне дают код Java, и я должен написать контрольные примеры, чтобы получить 100% охват. Но данный код написан так, что одно из утверждений "если" никогда не будет истинным. Мы не можем изменить код, но мы должны достичь 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{.....}
Я не могу дать контрольный пример, для которого выше "если" верно.
Метод defineTriangleType являетсяpublic String determineTriangleType(String side1, String side2, String side3 ) {......Some Processing.....}
1 ответ
Обычный подход здесь, чтобы убедиться, type
это желаемое значение. Для этого вам нужно изменить determineTriangleType
вернуть требуемый тип.
Вот где приходят фиктивные объекты. Идея состоит в том, чтобы расширить тестируемый класс Java и переопределить determineTriangleType
вернуть правильное значение безоговорочно в вашей производной реализации. Затем вы вызываете метод, который хотите протестировать на экземпляре производного класса, и теперь выполняется метод if оператора 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";
}
}