2012-02-28 1 views
1

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

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 

Running код: (? Какой вид)

>> 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},] 

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

+0

Что вы пытаетесь сделать? Насколько я помню, вы могли просто запустить файлы из командной строки, и в этом случае test/unit сообщит о отдельных неудачных тестах. –

+0

Сохранить результаты в файле Excel. Моя цель - сохранить статус pass/fail для каждого тестового примера в файле Excel. Результаты вроде 'Started F .. Закончены в 0.016001 секундах.3 тестах, 3 утверждениях, 1 неудачах, 0 ошибках' не могут рассказать детали; он показывает номер строки, который терпит неудачу, но все еще не очень хороший формат. –

+0

У меня есть тестовые комплекты, которые включают в себя множество тестовых примеров, управление ими индивидуально - это способ, но для этого все еще нужно написать наивную функцию для сбора результата экрана ... кажется, объезд ... –

ответ

0

Вы можете проверить другой Nat's posts способ захватить результаты. Короткий ответ на ваш вопрос заключается в том, что для получения результатов нет переменной. Все, что Вы получаете:

Loaded люкс Мои специальные тесты

работы
..

Законченный в 1.000935 секунд.

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

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

+0

Спасибо за ваши предложения, мало помогает, мне нужно больше исследований ... спасибо! –

1

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

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

ruby test_unit_to_rspec.rb 
+0

да, результаты вроде этого '3 теста, 3 утверждения, 1 неудачи, 0 ошибок' сообщают о результатах, но они недостаточно подробны ... если я не разбиваю каждый тестовый файл по отдельности, используя их индивидуально, используя наивную функцию для сбора эти выходные результаты ... кажется, слишком много работы, а не элегантный/Ruby способ делать вещи ... –

+0

Какую операционную систему вы используете? если вы используете Mac или Unix/Linux, я отвечу вам, как Ruby использует элегантный способ отображения. –

+0

Я использую это в Windows, но разворачиваю его позже на linux. Так что иди головой своим элегантным способом. Цените это, Амит. –

1

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

http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/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) 

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

0
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....