2009-11-25 2 views
8

Я хочу, чтобы модуль тестировал мою программу (на C), потому что я знаю о преимуществах этого, так как это показывает, где проблема.Unit Testing - Как это сделать?

Мне также нравится тест Blackbox, так как он говорит мне, работает ли программа (по крайней мере, для тестов).

На данный момент я использую Autotest (который поставляется с Autoconf), чтобы не добавлять зависимость.

На данный момент я бы не прочь так сильно использовать лучшую фреймворк, но проблема в том, что я не хочу использовать другую фреймворк для Blackbox и модульных тестов. Можно ли запускать тесты Blackbox из единой тестовой среды? То, что мне действительно нужно, это хорошая выходная запись журнала, точно говоря, что пошло не так и где.

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

+0

На каком языке написана ваша программа? – Mathias

+0

Эх, я не могу поверить, что забыл об этом. Его написано на C. – alternative

+0

Если вы рассмотрите другие рамки, в Википедии есть список модулей модульного тестирования для C: http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C. Существует также продукт под названием autounit, который должен хорошо интегрируется с autoconf, в настоящее время бета-версия. http://autounit.tigris.org/ http://autounit.tigris.org/files/documents/187/171/autounit.html –

ответ

2

Можно ли запустить BlackBox тесты из модульного теста рамки?

Да, вы можете вызывать Автотест с system() из модульных тестов, а затем утверждать возвращаемое значение.

Но я бы не рекомендовал это делать, поскольку модульные тесты выполняются очень часто, они должны быть очень быстрыми, то есть измеряться в секундах, а не в минутах.

Юнит-тесты и интеграционные тесты (которые вы называете BlackBox тесты) служат для разных целей: модульные тесты проверки, что единиц в коде (что бы это означает, что функция или кластеры функции) работает как ожидается, в ходе испытаний, в то время как интеграционные тесты охватывают программу от конца до конца, проверяя ее в целом.

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

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

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

С утверждениях нет ничего для вывода: либо ожидаемые и фактические значения равны, и ничего не происходит, или они разные, и UT рамочные выводит сообщение об ошибке (ожидается, является X, фактическое Y). Это позволяет компьютеру выполнять работу по тестированию.

С протоколированием разности выходных данных нужно по-прежнему вручную (визуально) проверять результат разности (например: есть ли один элемент в списке или один дополнительный элемент ...).

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

Возможно, вы захотите написать функцию, которая сравнивает списки с использованием утверждений.

0

Вы можете использовать CTest, который поставляется с CMake, замыкающий системы кросс-платформенной со многими бэкэндов: http://www.cmake.org/Wiki/CMake#CTest

PS: CMake является гораздо более мощным, чем Autotools тоже.

+0

Я не использую CMake. – alternative

+0

Вы можете рассмотреть переключатель, пока не поздно :-) – Flavius