2012-08-16 47 views
1

我有返回根據主叫方法什麼的私有方法:如何測試在ruby中使用調用者的方法?

private 
def aPrivateMethod 
    r = nil 
    caller_method = caller[0][/`([^']*)'/, 1] 

    case caller_method 
    when "method_1" 
     r = "I was called by method_1" 
    when "method_2" 
     r = "I was called by method_2" 
    end 

    return r 
end 

當編寫測試單元的方法名稱調用這個私有方法不會method_1也不method_2,這將是東西開始與測試我無法找到解決方案來返回測試通過。

+1

我很好奇爲什麼你會想做這樣的事情---我從來沒有試圖測試哪個對象調用另一個對象。在我看來,如果這很重要,那麼被測試的代碼就會過於緊密地耦合,或者需要重構以允許直接進行單元測試。 – Catnapper 2012-08-16 14:32:22

+0

很可能代碼需要重構,但在初始狀態下我看不到。不要問爲什麼。 :) – danizgod 2012-08-17 05:30:25

回答

0

您可以創建在您的測試類的代理方法用於此目的

def method_1 *args 
    aPrivateMethod *args 
end 

然後調用從測試這種方法。

+0

感謝您使用此解決方案。 – danizgod 2012-08-17 05:40:22

0

的情況下表達使用正則表達式:

def aPrivateMethod 
    caller_method = caller[0][/`([^']*)'/, 1] 

    case caller_method 
    when "method_1" 
     "I was called by method_1" 
    when "method_2" 
     "I was called by method_2" 
    when /^test_\d+/ 
     "test call from #{caller_method}" 
    else nil 
    end 
end 

而且,你必須在那裏有很多多餘的代碼......不需要R參數都沒有。

+0

謝謝你的回答。代碼中涉及r和其他代碼行的代碼已經變成了一個「標準」,我迫不及待地使用它。 – danizgod 2012-08-17 04:56:01

相關問題