Модульное тестирование применительно к частным методам - PullRequest
5 голосов
/ 17 апреля 2011

В настоящее время я пытаюсь создать несколько классов для преобразования Фурье. Я пытаюсь сделать это, сначала создав несколько юнит-тестов, а затем создаю базовую функциональность.

Проблема в том, что я могу написать один тест, чтобы проверить, работает ли алгоритм, и я знаю ожидаемый результат. Затем я начинаю строить большой алгоритм, и если он сработает, мои модульные тесты пройдут.

Моя проблема в том, что это не совсем TDD. Потому что обычно вы создаете тесты, которые тестируют очень базовую функцию класса. Теперь мой класс в основном выполняет один большой алгоритм, и я не могу протестировать меньшие части алгоритма, поскольку они не являются общедоступными (мне всегда говорили, что вы никогда не захотите тестировать частные методы).

Как вы справляетесь с этим?

Ответы [ 4 ]

3 голосов
/ 17 апреля 2011

Я вижу 2 возможных пути:

  1. Если возможно - перенести реализацию алгоритма в другой класс и разделить его на методы.Методы испытаний после.
  2. Просто напишите несколько тестов, которые охватывают возможные нормальные случаи, крайние случаи и случаи ошибок.
1 голос
/ 17 апреля 2011

Что ж, если в вашем классе есть только один тестируемый метод (согласно вашему критерию тестирования только открытых методов), тогда у вас нет другого выбора, кроме как тестировать только этот метод, верно?Однако это не означает, что это не TDD - и вы, безусловно, можете протестировать большое разнообразие входных значений.Большая часть работы здесь будет искать интересные значения - в каких крайних случаях может произойти сбой вашего преобразования?Есть ли недопустимый ввод и как он обрабатывается?

Есть ли какой-нибудь способ, которым вы можете выполнить алгоритмическую проверку многих значений, например, вызвать хорошо известную подпрограмму, используя некоторые ключевые идентификаторы, связанные с Фурье, или, возможно, используя вашуБПФ для умножения ?

1 голос
/ 17 апреля 2011

Я недавно боролся с "что такое юнит?"это действительно сложный вопрос.

Если у вас есть основания полагать, что субъединицы БПФ особенно подвержены ошибкам, то настройте граничные условия и нарушите правило, согласно которому частные методы не применяются.

Другой способскажем то же самое, что на самом деле подразделение - это подразделение, услугами которого пользуется БПФ, и тогда вы не нарушаете никаких правил.

0 голосов
/ 17 апреля 2011

Я думаю, что если вы не смогли протестировать отдельные компоненты вашего алгоритма, либо код очень тесно связан, либо код очень процедурный.

Возможно, вам придется определить свой код как единицы и сделать эти единицы как защищенный метод. Пока метод защищен, он посылает четкое сообщение о том, что он не является частью API.

...