Ruby单元测试:在每次测试失败后运行一些代码

Sau*_*tis 5 ruby unit-testing

Test::Unitteardown执行之前,在ruby单元测试中失败的断言后,是否有一些干净而优雅的方法来执行我的代码?

我正在进行一些自动GUI测试,并希望在出现故障后立即截取屏幕截图.

reg*_*fry 9

如果您使用的是1.9,请不要使用Test :: Unit :: TestCase作为基类.对它进行子类化并覆盖#run_test进行救援,获取屏幕截图并重新加注:

class MyAbstractTestCase < Test::Unit::TestCase
  def run_test( *args )
    super(*args)
  rescue
    snapshot()
    raise
  end
end
Run Code Online (Sandbox Code Playgroud)

或者,我认为这实际上是最简洁的方法,你可以使用before_teardown钩子:

class MyTestCase < Test::Unit::TestCase
  add_teardown_hook do |tc|
    screenshot() unless tc.passed?   
  end
end
Run Code Online (Sandbox Code Playgroud)

这不适用于1.8的测试/单位,但最小的是1.9.