2013-05-24 2 views
1

У меня есть тестовый костюм, как обычно, для проектов Perl, содержащий lib и каталог t. Тесты в t структурированы через подкаталоги. Поэтому я запускаю их, используя:Запустить pgTAP с Perl доказать вместо pg_prove

prove -Ilib -r t/ 

Пока ничего особенного, а афайк не является стандартным способом тестирования на Perl.

Поскольку это предположение, что это стандартный способ тестирования, я хотел бы, чтобы убедиться, что применимо следующее:

«Если запустить prove -r на t, вы тестировали все, что там проверить ".

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

Итак, вот моя проблема: мне нужно интегрировать некоторые тесты, используя pgTAP, который любезно предоставит инструмент pg_prove. Теперь я должен сделать два коммандос для тестирования. Кроме того, для запуска prove -Ilib -r мне также нужно запускать что-то вроде, например. pg_prove -S schema=customerX -U dbuser -d dbname t/pgTAP/*.sql. Проблема не такая большая, если вы автоматически вызываете тесты с cron или что-то еще. Но это действительно уменьшает вероятность того, что мы lazy разработчики запускают все тестовые тесты в течение наших напряженных дней.

Так что мне интересно, какой был бы лучший подход для реализации тестов таким образом, чтобы prove также включал эти тесты. Это, что я должен создать некоторые .t-файлы, которые обертывают все это (и как?)? Есть ли какие-либо трюки, которые я могу сделать со всем материалом Harness на CPAN? Будет ли простой test_all.sh в корневом каталоге, включая оба коммандос, выполнять лучшую работу, даже если он нарушает сделанные мной предположения?

Итак, мой вопрос в целом: Могу ли я запускать все тесты, в том числе pgTAP с prove? Если нет, есть ли наилучшая практика для решения моей проблемы?

Большое спасибо.

ответ

1

Да. Фактически, pg_prove просто передает все на prove. Предполагая, что ваши тесты pgTAP заканчиваются .sql, вы можете запустить все тесты, как это:

prove -lr --ext .sql --ext .t \ 
--source pgTAP \ 
--pgtap-option dbname=dbname \ 
--pgtap-option username=dbuser \ 
--pgtap-option suffix=.pg \ 
--pgtap-option set=schema=customerX 

Если вы используете Module :: Build, вы также можете иметь ./Build test запустить все тесты, тоже, как я сделал for circle , Для получения более подробной информации см. the TAP::Parser::SourceHandler::pgTAP documentation.

+0

большое спасибо! Я посмотрю на это! –

+0

В любое время. Вы также можете публиковать вопросы в [pgTAP mail list] (http://pgfoundry.org/mail/?group_id=1000389). – theory

+0

Мне пришлось удалить параметр '--pgtap-option suffix = .pg', но в остальном он работал точно так же, как мне нужно. –