Модульное тестирование - как это сделать? - PullRequest
8 голосов
/ 26 ноября 2009

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 26 ноября 2009

Можно ли запустить тесты черного ящика из юнит-теста рамки?

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

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

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

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

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

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

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

При регистрации выходных различий необходимо вручную (визуально) проверить результаты различий (например: отсутствует ли один элемент в списке или один дополнительный элемент ...).

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

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

0 голосов
/ 26 ноября 2009

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

PS: CMake намного мощнее, чем автоинструменты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...