[英]How to invoke all instance methods of a class in Ruby?
我目前正在努力將自己的小測試方法運行器腳本放在一起。
我需要某種方法來調用類中的所有方法。 當我調用run_tests
方法時,我的程序陷入了無限循環。 是什么原因造成的,有什么解決方案?
class FadTest < SeleniumTest
def can_open_page
@driver.get(@base_url + "/")
wait_element_present(:link, "DOCTORS")
@driver.find_element(:link, "DOCTORS").click
puts "page opened"
end
def test_method
puts "it works"
end
def run_tests
klass = self.class
klass.instance_methods(false).each do |method|
klass.instance_method(method).bind(self).call
end
end
end
如Wand Maker所述 , run_tests
涉及遞歸。 您的代碼通過以下方式執行:
SomeClass.instance_methods.each {}
run_tests
,就可以重新開始迭代。 我不確定您如何設計測試,因此這里有一些解決問題的方法
如果所有測試對象都具有FadTest
類,則可以在迭代中編輯邏輯,我的首選解決方案是Tin Man建議的解決方案
klass.instance_methods(false).each do |method|
next if method == :run_tests
# ...
end
唯一的問題是您仍在掃描:run_tests
元素。 如果您想保持完整的證明,而在數組中沒有:run_tests
,可以嘗試Cary Swoveland的建議 :
(klass.instance_methods(false) - [:run_tests]).each {}
如果被測試對象的類不是 FadTest
,那么我建議重寫該方法。
def self.run_tests(object)
klass = object.class
klass.instance_methods(false).each {}
end
FadTest.run_tests(some_object)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.