Некоторые антирекомендующие могут быть в порядке:
Anti-рекомендация:
НЕ используйте семейство тестовых пакетов Test::Unit
для Perl , таких как Test::Unit::Assert
и Test::Unit::TestCases
.
Причина: Test::Unit
представляется заброшенным.
Test :: Unit, Test :: Unit :: TestCases, Test :: Unit :: Assert работают, довольно хорошо (когда я их использовал 2015-2016). Test :: Unit предположительно не интегрирован с протоколом Perl Test Anything Protocol (TAP), хотя я обнаружил, что это легко исправить.
Но Test :: Unit разочаровывает, потому что многие другие тестовые пакеты Perl, в основном построенные с использованием Test :: Builder, такие как Test :: More, Test :: Most, Test :: Exception, Test :: Differences, Test :: Deep, Test :: Warn и т. Д. НЕ взаимодействуют с подходом объектно-ориентированного тестирования Test :: Unit.
Вы можете смешивать Test :: Unit тесты и Test :: Builder тесты, как только вы адаптировали Test :: Unit для работы с Test :: More и TAP; но хорошие возможности этих других пакетов недоступны для расширения OO. Что во многом является причиной использования теста в стиле xUnit.
Предположительно, CPAN Test::Class
позволяет "легко создавать тестовые классы в стиле xUnit / JUnit" - но я не уверен, что могу рекомендовать это. Это, конечно, не похоже на xUnit для меня - не на ОО, это уникальные имена, такие как is(VAL1,VAL2,TESTNAME)
вместо имен в стиле xUnit, такие как $test_object->assert_equals(VAL1,VAL2,TEST_ERR_MSG)
. Test :: Class обладает приятной функцией автоматического определения всех аннотированных тестов: Test, сравнимый с xUnit и подходом TEST :: Unit :: TestCase, использующим интроспекцию для запуска всех функций с именем test _ *.
Тем не менее, базовый пакет Test::Builder
является объектно-ориентированным и, следовательно, имеет гораздо больший стиль xUnit. Не пугайтесь названия - это не фабрика, это в основном набор тестовых методов. Хотя большинство людей наследуют его, вы можете позвонить напрямую, например, если хотите. $test_object->is(VAL1,VAL2,TESTNAME)
, и часто вы можете использовать вызовы Test :: Builder, чтобы обойти ограничения процедурных пакетов, таких как Test :: More, которые построены поверх Test :: Builder - как исправление уровня стека вызовов, при котором сообщается об ошибке.
Test :: Builder обычно используется в одноэлементном стиле, но вы можете создавать несколько объектов. Я не уверен, ведут ли они себя так, как можно было бы ожидать от теста семейства xUnit.
Пока что нет простого способа обойти ограничения, такие как Perl TAP-тесты, использующие TEST_NAMES для каждого утверждения, без иерархии и без различия TEST_NAMES от TEST_ERROR_MESSAGES. (Ошибочный уровень отчетности помогает с этим недостатком.)
Может быть возможно создать адаптер, который делает тесты в стиле Test :: Builder и TAP более объектно-ориентированными, так что вы можете перебазировать что-то отличное от TAP (которое записывает больше полезной информации, чем TAP - предположительно, как протокол ANT XML) , Я думаю, что для адаптации имен и / или отсутствующих понятий потребуется либо перейти в Test :: Builder, либо провести самоанализ.