2012-12-02 82 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

相关问题