Как мне выполнить Test :: Unit Suite до завершения с подсчетом тестов / сбоев? - PullRequest
2 голосов
/ 15 ноября 2010

Я унаследовал большой набор тестов :: Модульные тесты, и одна из моих первых задач - запустить набор до его завершения, а не завершать работу после первого неудачного теста.спасение AssertionFailedError и обеспечение выходной строки, но это кажется неправильным.Какой способ лучше?Похоже, это будет вариант конфигурации.

1 Ответ

4 голосов
/ 15 ноября 2010

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

Я использую как базовую тестовую / модульную lib, которая поставляется с ruby ​​1.8, так и несколько версий гема с ruby ​​1.9.Обычное поведение для них обоих - запускать весь загруженный комплект до завершения и суммировать результаты.

Запуск скрипта, который говорит, что require 'test/unit' добавит ловушку при выходе для запуска Test::Unit::AutoRunner с Test::Unit::Collector::ObjectSpace сборщик (т.е. запускает каждый экземпляр Test::Unit::TestCase, загруженный в данный момент в глобальном объектном пространстве).

Также довольно легко написать свой собственный пользовательский тестовый прогон, который вручную загружает ваши тестовые классы и упаковывает их в Test::Unit::TestSuite и запишите его результаты.

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

Например,

require 'test/unit'
class Foo < Test::Unit::TestCase
  def testFoo
    flunk 'bad foo'
  end
end
class Bar < Test::Unit::TestCase
  def testBar
    raise 'bar bar'
  end
end

дает

Loaded suite foo
Started EF Finished in 0.001000 seconds.

  1) Error:
testBar(Bar)
RuntimeError: bad bar
    foo.rb:9:in `testBar`

  2) Failure:
testFoo(Foo) [foo.rb:4]:
bad foo

2 tests, 1 assertions, 1 failures, 1 errors, 0 skips

Наконец: где вы пытаетесь спасти / обеспечить?В тестовых методах?При нормальных обстоятельствах нет причин перехватывать AssertionFailedError.Это нужно сделать Test::Unit::TestCase, чтобы посчитать ошибки и предоставить вам нужный отчет.Поймать это мешает тому, что написано для теста / модуля.

...