2013-07-24 49 views
0

情况很简单。我有这样的(first.rb)的模块:Ruby单元测试,显示错误的错误数

def ret_s(l) 
    return "one" if l == 1 
    return "twoe" if l == 2 
    return "threee" if l == 3 
end 


def ret_l(str) 
    return 1 if str == "one" 
    return 2 if str == "two" 
    return 4 if str == "three" 
end 

和测试类(TestFist.rb):

require 'test/unit' 
require './first' 

class TestFirst < Test::Unit::TestCase 

    def test_fist 

    assert_equal("one",ret_s(1)) 
    assert_equal("two",ret_s(2)) 
    assert_equal("three",ret_s(3)) 
    end 

    def test_second 

    assert_equal(1,ret_l("one")) 
    assert_equal(2,ret_l("two")) 
    assert_equal(3,ret_l("three")) 
    end 

end 

当运行这个测试,为什么我得到的答案是这样的:

$ ruby TestFirst.rb 
Run options: 

# Running tests: 

FF 

Finished tests in 0.001000s, 2000.0000 tests/s, 5000.0000 assertions/s. 

    1) Failure: 
test_fist(TestFirst) [TestFirst.rb:9]: 
<"two"> expected but was 
<"twoe">. 

    2) Failure: 
test_second(TestFirst) [TestFirst.rb:17]: 
<3> expected but was 
<4>. 

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

最后一行让我觉得我做错了什么。我希望这样的事情:

2次的测试中,6个断言,3次失败,0失误,0跳过

2次的测试中,5个断言,2次失误,0失误,0跳过

回答

2

第一次测试在第一次失败断言后中止,因此它从不执行行assert_equal("three",ret_s(3))

+1

我知道所有这些都是关于这个测试,但不应该声明只是注册失败并转到下一个? – viniolli

+0

不知道你如何定义“不应该”。如果你的意思是“定义的行为”,那么不,它不应该,因为这不是测试套件的工作方式,所有我在第一次失败断言后使用的中断。如果你的意思是“逻辑上正确的行为”,那么我认为这取决于每个人。对我来说它是有道理的:如果我断言返回的用户是预期的并且电子邮件匹配,但是结果证明它是错误的用户,那么在检查电子邮件时没有意义。如果它们匹配,那纯粹是巧合,如果它们不是,那只是垃圾邮件,第一个断言就是实际问题。 –