在我的ruby Selenium Tests中,每次测试都有很多相同的代码。如何在测试之间最好地共享代码?例如,我的setup和teardown方法在每个文件中是相同的,如何将它们从每个文件中删除到一个共享文件中,或者甚至可能?
def setup
@verification_errors = []
@selenium = Selenium::Client::Driver.new \
:host => "#$sell_server",
:port => 4444,
:browser => "#$browser",
:url => "http://#$network.#$host:2086/",
:timeout_in_second => 60
@selenium.start_new_browser_session
end
def teardown
@selenium.close_current_browser_session
assert_equal [], @verification_errors
end
我已尝试将设置放在共享模块和必需文件中,但两者都存在需要访问启动的@selenium对象的其他方法的继承的不同问题。如果有一个用于共享代码的设计,那么什么是好的设计呢?
答案 0 :(得分:0)
我不确定你正在使用什么测试框架,但是在rspec中你可以把它放到你的spec_helper文件中,然后做一个before(:each)/ after(:each)。我会检查您选择的框架的回调文档。
答案 1 :(得分:0)
对于测试单元框架 - 似乎可以创建一个SharedTest类,使用setup和teadown方法继承Test :: Unit :: Testcase。然后只是将测试文件子类化为SharedTest。我发现的唯一不利后果是我必须添加一个test_default方法,该方法在SharedTest中不执行任何操作以使其工作。如果我将我的测试方法test_default命名为覆盖它并且看起来没问题,但不是很具描述性......
sharedtest.rb
class SharedTest < Test::Unit::Testcase
def setup
@verification_errors = []
@selenium = Selenium::Client::Driver.new \
:host => "#$sell_server",
:port => 4444,
:browser => "#$browser",
:url => "http://#$network.#$host:2086/",
:timeout_in_second => 60
@selenium.start_new_browser_session
end
def teardown
@selenium.close_current_browser_session
assert_equal [], @verification_errors
end
def test_default
#puts self
end
end
T01_testcasename.rb
class Test_01_whatever < SharedTest
def test_default
#test code
end
我仍然愿意接受更好的解决方案,但这似乎对我有用。