ठीक है आप अपनी पसंद के अनुसार Test::Unit::Assertions
का विस्तार कर सकते हैं, मुझे नहीं लगता कि ऐसा करने का एक अंतर्निहित तरीका है। इस तरह शायद कुछ (त्वरित & गंदा):
require 'test/unit'
module Test::Unit::Assertions
def safe_assert(test, msg=nil)
passed = msg.nil? ? assert(test) : assert(test,msg)
ensure
puts 'take screenshot' unless passed
end
end
class MyTest < Test::Unit::TestCase
def setup
puts 'setup'
end
def teardown
puts 'teardown'
end
def test_something
safe_assert true
puts 'before failing assert'
safe_assert false, "message"
puts 'after failing assert'
end
end
उत्पादन:
Loaded suite unittest
Started
setup
before failing assert
take screenshot
teardown
F
Finished in 0.001094 seconds.
1) Failure:
test_something(MyTest) [unittest.rb:5]:
message
1 tests, 2 assertions, 1 failures, 0 errors, 0 skips
Test run options: --seed 58428
संपादित करें: आप वास्तव में एक सरल तरीका था assert
को आर्ग गुजारें सकता:
module Test::Unit::Assertions
def safe_assert(*args)
passed = assert(*args)
ensure
puts 'take screenshot' unless passed
end
end
भी
, आप begin
- ensure
- end
ब्लॉक में केवल मानक assert
को लपेट सकते हैं यदि आपको केवल आवश्यकता है यह कार्यक्षमता अकसर:
class MyTest < Test::Unit::TestCase
def test_something
safe_assert true
puts 'before failing assert'
begin
passed = assert false, "message"
ensure
puts 'take screenshot' unless passed
end
puts 'after failing assert'
end
end
या आप एक विधि बनाते हैं जो निम्न उदाहरण में स्क्रीनशॉट सुनिश्चित करता है। यह वास्तव में मेरे लिए स्पष्ट तरीका की तरह लगता है:
def screenshot_on_fail
passed = yield
ensure
puts 'take screenshot' unless passed
end
class MyTest < Test::Unit::TestCase
def test_something_else
screenshot_on_fail do
assert true
end
screenshot_on_fail do
assert false, 'message'
end
end
end
स्रोत
2012-03-23 13:54:09
यह ऐसा करने का एक अच्छा तरीका है, धन्यवाद! –
आपका स्वागत है! अगर आपकी समस्या हल हो गई है तो जवाब स्वीकार करना न भूलें :) –
मेरा संपादन देखें, वास्तव में मेरे मन में आने के लिए वास्तव में एक बहुत साफ तरीका है:: ' –