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";
  }
}
Другие вопросы по тегам