2014-01-22 4 views
1

При тестировании рекурсивной функции, такой как следующий факториальный метод; нужно ли тестировать случай по умолчанию? Если я пройду через 3, выход будет 7, а отчеты о покрытии кода будут отображаться на 100%. Однако я явно не тестировал факториал (0). Что вы думаете об этом?Покрытие факториала

public class Factorial 
{ 
    public static double factorial(int x) 
    { 
    if (x == 0) 
    { 
     return 1.0; 
    } 
    return x + factorial(x - 1); 
    } 
} 

ответ

1

Кодовый охват не говорит вам всего. В этом случае вы получите 100% покрытие линии для factorial(3), но оно не будет охватывать все «случаи».

При тестировании рекурсивной функции вы хотели бы, чтобы проверить различные случаи:

  • Каждая из базовых случаев.
  • Рекурсивные случаи.
  • Неверный ввод (например, отрицательные числа).
  • Любые функциональные кромки.

Вы можете протестировать меньшее, но вы оставите себя открытым для потенциальных ошибок, когда код будет изменен в будущем.

+0

Спасибо за ваш ввод Симеон, я бы проголосовал за ваш ответ, но у меня недостаточно репутации. , , , все же :) – CodeMonkey

0

Технически, если вы проверите [ну, выполните] факториал (2), вы также проверите [выполнить] факториал (1) , если ваш алгоритм правильный.

Как ваш инструмент тестирования узнает, что ваш код верен? Как бы тестер, который не писал код, знает, что ваш код правильный? Точка «охвата тестирования» заключается в том, чтобы определить, что на самом деле большая часть кода была проверена [хорошо, выполнена] независимо от того, является ли она алгоритмически правильной или нет.

Линия, не выполненная, является линией, для которой у вас нет доказательств, что она работает. Это то, что говорит о вашем тестировании. Цель ваших тестов - проверить, что приложение выдает правильный ответ. Покрытие и тесты служат двум различным целям. Охват просто случается, чтобы воспользоваться тем фактом, что тесты выполняют код.

Смежные вопросы