2012-05-29 80 views
1

我想在ruby中測試單個方法。它是在一個單獨的文件所以基本上:Ruby實例_eval與負載混淆#

a.rb:

我a_spec.rb
def my_method 
    ... 
end 

require 'minitest/autorun' 

Object.instance_eval do 
    load("path_to/a.rb") 

    def hello_world 
    ... 
    end 
end 

當我嘗試運行我的測試,它說,my_method是私人方法,而我實際上可以直接撥打Object.hello_world。是什麼賦予了?

另外,是否有一個簡單的方法來測試簡單的ruby方法(沒有類或模塊)與minitest?

回答

0

做上述加載不會將a.rb的方法作爲單例方法添加到Object中。相反,它將方法添加到全局名稱空間。 (你正在做地方自行指Object類的塊內部的負載條件就是無關。)

隨着你上面的代碼,你應該能夠調用* my_method *直接在您的測試:

class MyTest < MiniTest::Unit::TestCase 

    def test_my_method 
    assert my_method 
    end 

    def test_hello_world 
    assert Object.hello_world 
    end 
end 
+0

即時測試正在加載的方法,而不是你好世界。那麼我怎麼去解決呢?我嘗試過調用my_method,但它一直說它是未定義的 – corroded