如何为ruby的Test :: Unit :: TestCase中的所有测试定义通用设置和拆除逻辑?

时间:2012-02-02 20:21:45

标签: ruby unit-testing installation testunit teardown

假设在setupteardown中执行的潜在昂贵操作对于所有测试都是相同的,并且在测试运行期间其结果不会被弄乱。在每次测试之前/之后让它们运行似乎是不对的。

那么有没有一种首选的方法在第一次测试执行之前和仅在最后一次测试之后运行设置/拆卸代码?

编辑:我正在处理的特定情况应该测试Net :: FTP的一些扩展,从而建立一个FTP连接并设置一些远程对象进行测试:

class TestFTPExtensions < Test::Unit::TestCase
  def setup
    # Setup connection
    @ftp = Net::FTP.new 'localhost', 'anonymous'
    @ftp.passive = true

    # Create remote test directory
    @ftp.mkdir 'dir'

    # Create remote test file
    path = File.join Dir.tmpdir, 'file'
    File.open path, 'w' do |f|
      @ftp.put f
    end
    File.delete path
  end

  def teardown
    @ftp.rmdir 'dir'
    @ftp.delete 'file'
    @ftp.close
  end

  # imagine some tests here that don't change/remove any remote objects

end

1 个答案:

答案 0 :(得分:4)

感谢Andrew我找到了这个here on stackoverflow的答案。

然而,在尝试找到答案的过程中,我还注意到在1.9.x分支中,标准测试框架已切换到MiniTest。所以实际上我现在正在使用它进行测试。 This answer解释了如何使用MiniTest实现相同目标。