2012-12-02 80 views
1

我正在嘗試使用Shoulda和上下文來避免測試中的重複。在下面的測試中,我想期待以下輸出。爲什麼要執行相同的測試兩次

"dir created" 
"dir removed" 

,而是我有

"dir created" 
"dir removed" 
."dir created" 
. 
Finished tests in 0.001907s, 1048.7677 tests/s, 1048.7677 assertions/s. 
2 tests, 2 assertions, 0 failures, 0 errors, 0 skips 

爲什麼兩次執行第一次測試,我不明白?

這是我的測試代碼:

class FileDirTest < Test::Unit::TestCase 
context "FileDir:" do 

setup do 
    @fd = FileDir.new 
    @myDir = "dir1" 
end 

context "When dir is create:" do 
    setup do 
    @fd.create_dir(@myDir) 
    p "dir created" 
    end 
    should "be Dir1" do 
    assert_equal true, Dir.exist?(@myDir) 
    end 
    context "When delete a dir" do 
    setup do 
     @fd.remove_dir(@myDir) 
     p "dir removed" 
    end 
    should "be removed" do 
     assert_equal false, Dir.exist?(@myDir) 
    end 
    end 
end 

末 結束

+0

好的測試不會按順序出現在列表中。它們從內部測試向外部測試執行。 「設置」 「目錄刪除」 然後 「設置」 –

回答

2

就像在任何測試框架的設置是每次測試之前運行。由於一個上下文嵌套在另一個上下文中,因此您會看到「dir created」兩次。

+0

好吧 「創建目錄」,這是有道理的,但我不明白爲什麼運行測試,而「刪除目錄 「創建目錄」 「,斷言確定表示它已被刪除,然後再次運行第一個測試,創建一個新的目錄。當整個測試結束時,我可以看到dir文件夾。它不應該在那裏 –

+0

如果它會像你所說的我理解它應該顯示這個: 「dir created」 - >第一次測試。對於第二個測試將顯示 。「dir created」後跟 「dir removed」 –

+0

測試不應該假設任何特定順序。訂購測試引入時間耦合,使其變脆。唯一重要的順序是設置 - >運行測試 - >拆卸。所以我認爲你需要的是拆卸目錄,如果它在那裏的話。 – Todd

相關問題