这个问题听起来很愚蠢,但我从来没有在网上找到答案。 假设你有一个像这个页面的测试套件: 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},]
我是测试的新手,但我不顾一切地想知道答案......
答案 0 :(得分:1)
您需要执行测试脚本文件,就是这样,结果将显示通过或失败。
假设您保存文件test_unit_to_rspec.rb,之后执行以下命令
ruby test_unit_to_rspec.rb
答案 1 :(得分: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)
结果将以适合每个测试用例的格式保存在io流中。
答案 2 :(得分:0)
您可以查看另一个Nat's posts以获取捕获结果的方法。对您的问题的简短回答是没有用于捕获结果的变量。你得到的只有:
加载套件我的特殊测试
发起者
..以1.000935秒结束。
2次测试,2次断言,0次失败,0次错误
如果您想向其他人报告发生的事情,这对您没有多大帮助。 Nat的另一篇文章展示了如何在rspec中包装Test :: Unit以获得更好的结果和更大的灵活性。
答案 3 :(得分:0)
<?php the_posts_pagination(
array(
'prev_text' => __( 'Prev', 'btimes' ),
'next_text' => __( 'Next', 'btimes' ),
'screen_reader_text' => ' '
) ); ?>
示例输出:
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