2013-07-24 46 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

不知道你如何定義「不應該」。如果你的意思是「定義的行爲」,那麼不,它不應該,因爲這不是測試套件的工作方式,所有我在第一次失敗斷言後使用的中斷。如果你的意思是「邏輯上正確的行爲」,那麼我認爲這取決於每個人。對我來說它是有道理的:如果我斷言返回的用戶是預期的並且電子郵件匹配,但是結果證明它是錯誤的用戶,那麼在檢查電子郵件時沒有意義。如果它們匹配,那純粹是巧合,如果它們不是,那只是垃圾郵件,第一個斷言就是實際問題。 –