2013-08-29 4 views
4

Я столкнулся с ситуацией, я не уверен, как тестировать: алгоритмы. В частности, я пытаюсь написать метод Adler32 и создать для него единичный тест, но на данный момент я ударил кирпичную стену.Как вы тестируете алгоритм в C#?

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

+0

Не знаете, в чем проблема с передачей * Известный * ввод и проверка результатов соответствует * известному * результату ... Как «добавить два числа» будет проверено с помощью известного ввода '{2,2}' и проверено, что результатом является ' 4' (без пробега '2 + 2' в тесте) ... –

+2

@AlexeiLevenkov: У меня нет проблем с этим, кроме единственного способа, которым я знаю, как генерировать известный вход/результат, повторно используя тот же алгоритм, я пытаясь проверить. Как узнать, что результат является ** правильным ** для непроверенного алгоритма? –

+4

Известный быть хорошим Входы/выходы будут в порядке, но, как вы сказали, вам нужно рассчитать выход. Один из способов - использовать уже зарекомендовавшую себя работу Adler32. Или вы можете сломать алгоритм на части, которые вы можете проверить. – Kyro

ответ

6

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

Если вы реализуете алгоритм, который не имеет легкодоступных данных ввода-вывода, повторите реализацию алгоритма другим способом, например, в Excel, и создайте данные, которые, как вы знаете, точны. Мы часто это делаем со статистическими расчетами для отчетов, в которых мы можем легко генерировать данные в Excel.

0

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

Как ваш алгоритм делает некоторые вычисления, которые вы не можете доверять по умолчанию (это точка тестирования), вам нужно проверить результаты в соответствии с постоянными значениями. Например. вы поставляете 5 и ваш метод возвращает 17. Который либо прекрасен, либо нет - ваш тест проходит или терпит неудачу.

Где взять 17? Используйте бумагу и карандаш, сайт онлайн-расчетов, каким бы способом вы ни доверяли.

Тест, особенно единицы измерения, должен быть простой и очень легкий. Вы не должны предлагать альтернативный подход, как вычислять результаты и проверять их против тех, которые производят код. Этот подход приносит вам две разные реализации, которые вы должны были бы поддерживать, рефакторинг и т. Д.

Очевидно, что вы можете предоставить таблицу входов и ожидаемых выходов, а не только 5 и 17.

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