Ruby Test: юнит, как узнать статус неудачи / прохождения для каждого теста в наборе тестов? - PullRequest
1 голос
/ 28 февраля 2012

Этот вопрос звучит глупо, но я так и не нашел в Интернете ответа на этот вопрос.Предположим, у вас есть набор тестов, подобный этой странице: http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing или код:

require "simpleNumber"
require "test/unit"

class TestSimpleNumber < Test::Unit::TestCase

  def test_simple
    assert_equal(4, SimpleNumber.new(2).add(2) )
    assert_equal(4, SimpleNumber.new(2).multiply(2) )
  end

  def test_typecheck
    assert_raise( RuntimeError ) { SimpleNumber.new('a') }
  end

  def test_failure
    assert_equal(3, SimpleNumber.new(2).add(2), "Adding doesn't work" )
  end

end

Запуск кода:

>> ruby tc_simpleNumber2.rb
Loaded suite tc_simpleNumber2
Started
F..
Finished in 0.038617 seconds.

  1) Failure:
test_failure(TestSimpleNumber) [tc_simpleNumber2.rb:16]:
Adding doesn't work.
<3> expected but was
<4>.

3 tests, 4 assertions, 1 failures, 0 errors

Теперь, как использовать переменную (чтовид?) чтобы сохранить результаты тестирования?например, такой массив:

[{:name => 'test_simple', :status => :pass}, 
    {:name => 'test_typecheck', :status => :pass},
    {:name => 'test_failure', :status => :fail},]

Я новичок в тестировании, но отчаянно хочу знать ответ ...

Ответы [ 4 ]

1 голос
/ 29 февраля 2012

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

Предположим, вы сохранили файл test_unit_to_rspec.rb, после чего выполните нижеприведенную команду

ruby test_unit_to_rspec.rb
1 голос
/ 04 марта 2012

Решена проблема с установкой высокого подробного уровня в вызове тестового бегуна.

http://ruby -doc.org / STDLIB-1.8.7 / libdoc / тест / блок / RDoc / Test / Unit / UI / Console / TestRunner.html

require 'test/unit'
require 'test/unit/ui/console/testrunner'

class MySuperSuite < Test::Unit::TestSuite
    def self.suite
        suites = self.new("My Super Test Suite")
        suites << TestSimpleNumber1
        suites << TestSimpleNumber2
        return suites
    end
end

#run the suite
# Pass an io object
#new(suite, output_level=NORMAL, io=STDOUT)
runner = Test::Unit::UI::Console::TestRunner.new(MySuperSuite, 3, io)

результаты будут сохранены в потоке io в хорошем формате для каждого теста.

0 голосов
/ 18 января 2017
class Test::Unit::TestCase
  def setup
    @id = self.class.to_s()
  end


  def teardown
    @test_result = "pass"

    if(@_result.failure_count > 0 || @_result.error_count > 0)
      @test_result = "fail"
      # making sure no errors/failures exist before the next test case runs.
      i = 0
      while(i < @_result.failures.length) do
        @_result.failures.delete_at(i)
        i = i + 1
      end
      while(i < @_result.errors.length) do
        @_result.errors.delete_at(i)
        i = i + 1
      end
      @test_result = "fail"
    end # if block ended
    puts"#{@id}: #{@test_result}"
  end # teardown definition ended
end # class Test::Unit::TestCase ended

Пример вывода:

test1: Pass
test2: fail
so on....
0 голосов
/ 28 февраля 2012

Вы можете проверить еще одну из сообщений Ната , чтобы узнать, как получить результаты. Краткий ответ на ваш вопрос: нет переменной для получения результатов. Все, что вы получаете:

Загруженный пакет Мои специальные тесты

Начало
..

Завершено за 1.000935 секунд.

2 теста, 2 утверждения, 0 сбоев, 0 ошибок

Что не очень полезно, если вы хотите сообщить кому-то еще о том, что произошло. В другом посте Ната показано, как обернуть Test :: Unit в rspec, чтобы получить лучший результат и большую гибкость.

...