Как проверить код выхода в Test :: More? - PullRequest
2 голосов
/ 15 января 2009

В соответствии с документацией Test :: More , он будет завершаться с определенными кодами выхода в зависимости от результатов ваших тестов. У меня вопрос, как я могу проверить эти коды выхода?

пс. Я пытаюсь построить ремень сам. Можно ли использовать простой жгут?

ps2. Test :: Harness сделала свое дело для меня. В частности, функция execute_tests. Эта функция возвращает всю статистику, которую я хочу. Спасибо всем, кто дал полезные ссылки.

Ответы [ 3 ]

7 голосов
/ 15 января 2009

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

4 голосов
/ 15 января 2009

Это код возврата процесса. Если вы работаете в оболочке какого-то варианта Unix, вы можете получить его как $? (что, вероятно, делает ваш вопрос больше о bash, чем о perl)

Общие идиомы:

perl your_file.t
if [[ $? -gt 10 ]]; then
  echo "Wow, that's a lot of failures"
elif [[ $? -gt 0 ]]; then
  echo "Tests failed"
else
  echo "Success!"
fi

Альтернативно, если вас интересует только успех / неудача:

perl your_file.t || echo "Something bad happened."
2 голосов
/ 16 января 2009

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

Способ nice включает использование модуля, который предоставляет вам функцию стиля system, которая обрабатывает возвращаемые значения для вас:

use IPC::System::Simple qw(systemx EXIT_ANY);

my $exit_value = systemx( EXIT_ANY, 'mytest.t' );

Символ EXIT_ANY позволяет вашему сценарию возвращать любое значение выхода, которое мы затем можем зафиксировать. Если вы просто хотите убедиться, что ваши скрипты проходят (т. Е. Возвращают нулевой статус выхода) и останавливаются при любой неудаче, это поведение по умолчанию IPC :: System :: Simple :

use IPC::System::Simple qw(systemx);

systemx( 'mytest.t' );  # Run this command successfully or die.

Во всех приведенных выше примерах вы можете запросить команду замены system вместо systemx, если вы довольны возможностью включения оболочки. Подробнее см. Документацию IPC :: System :: Simple .

Существуют и другие модули, которые могут позволить вам легко запустить команду и зафиксировать ее значение выхода. TIMTOWTDI.

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

Всего наилучшего,

Пол

Раскрытие информации: я написал IPC :: System :: Simple, и поэтому может иметь к ней положительный уклон.

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