Ruby 为什么LDA要执行相同的测试两次

Ruby 为什么LDA要执行相同的测试两次,ruby,testing,shoulda,Ruby,Testing,Shoulda,我试图使用Shoulda和context来避免测试中的重复。在下面的测试中,我希望得到以下输出 "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 skip

我试图使用Shoulda和context来避免测试中的重复。在下面的测试中,我希望得到以下输出

"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
classfiledirtest
结束
结束

就像在任何测试框架中一样,每次测试之前都会运行设置。由于一个上下文嵌套在另一个上下文中,您会看到“dir created”两次。

好的,这是有意义的,但我不理解为什么在运行“remove dir”测试时,断言ok表示它已被删除,然后再次运行第一个测试,创建一个新的dir。当整个测试完成后,我可以看到dir文件夹。它不应该在那里,如果它像你说的那样,我理解它应该显示这样的内容:“dir created”->用于第一个测试。对于第二个测试,将显示“dir created”后跟“dirremoved”的测试不应采用任何特定顺序。排序测试引入了时间耦合,使它们变得脆弱。唯一重要的顺序是设置->运行测试->拆卸。所以我认为你需要的是一个拆卸来删除目录,如果它在那里的话。好的,测试不是按照它们在列表中出现的顺序执行的。它们是从内部测试向外部测试执行的。“安装”“目录已创建”“目录已删除”然后“安装”“目录已创建”