Руби "test/unit", как мне отображать сообщения в утверждениях

У меня есть утверждения в моем сценарии ruby.

Каждое из этих утверждений также имеет сообщение для описания утверждения.

Итак, у меня есть два вопроса, вращающихся вокруг этого

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

  2. Весь тест завершается, когда любое утверждение не выполняется. Как заставить тесты продолжаться, даже если одно утверждение не выполнено?

Пример кода, который я использую

assert_match("hey", "hey this is a test", "The word exists in the string")

Таким образом, вывод в настоящее время выглядит как -

ruby ruby11.rb -v v
Loaded suite ruby
Started
test_ruby(Ruby): 
F

Finished in 40.555587 seconds.

  1) Failure:
test_ruby11(Ruby11) [ruby11.rb:73]:
Text box not displayed
<false> is not true.

1 tests, 3 assertions, 1 failures, 0 errors

И я хочу, чтобы это выглядело как

ruby ruby.rb -v v
Loaded suite ruby
Started
test_ruby(Ruby): 
F

ok 1 - First test successful
ok 2 - The text is displayed
ok 3 - The image is present
not ok 4 - Text box not displayed
ok - The picture is visible

Finished in 40.555587 seconds.

  1) Failure:
test_ruby(Ruby) [ruby11.rb:73]:
Text box not displayed
<false> is not true.

1 tests, 4 assertions, 1 failures, 0 errors

Таким образом, на приведенном выше желаемом дисплее все состояния утверждений отображаются как время выполнения теста. (Что-то вроде TAP в Perl). Я новичок в ruby, так что я уверен, что я делаю что-то не так.

Также я пробовал подробный параметр ruby ruby.rb -v v, пока выполняется скрипт. Но это тоже не помогает.

Помощь будет оценена

2 ответа

Решение

Там нет особого выбора для вывода TAP конкретно. Одним из тестовых фреймворков был Bacon, клон RSpec с выходом TAP, но, похоже, он больше не активен.

Если вам нужна совместимость с Continuous Integration, гем ci_reporter можно использовать для преобразования результатов теста (как из Test::Unit, так и из RSpec) в формат JUnit XML, который позволит работать с Jenkins/Hudson, Bamboo и другими JUnit. CI серверы.

Но в отличие от RSpec, Test/Unit имеет ограничение, когда он не сообщает о пройденных тестах. Здесь обсуждается запуск Test / Unit через форматировщик RSpec HTML, в который будут включены имена проходящих тестов.

Обновление 2015: вы можете захотеть взглянуть на MiniTest, который сейчас набирает популярность и имеет много плагинов для форматирования, а в остальном он очень гибкий / расширяемый.

Вот как я это делаю, но учтите следующее:

  1. Имейте одно утверждение за тест. Каждый конкретный тест должен быть добавлен для отдельного фрагмента поведения. Например, если текст может отображаться без изображения, выделите его test_text_appears а также test_image_appears тесты. Наличие одного утверждения на тест означает, что когда что-то ломается, вы можете увидеть все ошибочные утверждения, а не только первое утверждение в тесте с большим количеством утверждений.
  2. Попросите имя теста описать, что он должен делать, например: test_text_appears,
  3. Какие сообщения об ошибках должны сообщать - я не на 100% уверен, что это хорошая идея, поэтому я открыл отдельный вопрос: что делает хорошее сообщение об ошибке для testunit или других фреймворков в стиле nunit?
Другие вопросы по тегам