2010-06-03 53 views
0

我正在尋找寫入到外部Web服務的代碼的單元測試的最佳方法。 POST請求的主體是一個XML文檔,它描述了Web服務要執行的操作和數據。如何在Ruby/Rails中測試發送到Web服務的XML

現在,我已經將webservice包裝在它自己的類中(類似於ActiveResource),並且我看不到任何方式來測試由該類生成的確切XML,而無需通過暴露某些內部XML來破壞封裝生成作爲公共方法的類。這似乎是一種代碼異味 - 從類的用戶的角度來看,他們不應該知道也不關心類是如何實際實現Web服務調用的,無論是XML,JSON還是信鴿。

對於類的例子:

class Resource 
    def new 
    #initialize the class 
    end 

    def save! 
    Http.post("http://webservice.com", self.to_xml) 
    end 

    private 
    def to_xml 
    # returns an XML representation of self 
    end 
end 

我希望能夠測試產生,以確保它符合什麼網絡服務規格期待的XML。那麼我可以最好的做到這一點,而不需要to_xml公共方法?

回答

1

而不是調用一個私有方法,你可以發送郵件:

myobject.send(:method_name, args) 

這應該避免訪問私有方法的任何問題。也許更優雅,如果你使用RSPEC你可以這樣做:

before(:each) do 
    MyClass.send(:public, *MyClass.protected_instance_methods) 
end 

,然後在你的測試就可以正常調用該方法。

+0

您可以使用send來調用Ruby 1.8中的私有方法,但不能使用1.9。這仍然是一個破解 - 我想測試接口(Ruby的一個,和Web服務之一),而不是它們的內部實現 - 如果我改變了如何在類中生成我的XML,我不應該改變我的測試。 – 2010-06-03 03:44:29