我想測試一段使用網絡的代碼(NSURLConnection
類,具體而言)。代碼(姑且稱之爲NetworkManager
)看起來有點像這樣:使用NSURLConnection進行單元測試
- (id) buildConnection
{
// some more code and then:
return [NSURLConnection …];
}
- (void) startNetworkSync
{
id connection = [self buildConnection];
//…
}
在單元測試中,我想擺脫網絡,即。用模擬替換NSURLConnection
對象。我該怎麼做呢?
我試過創建了NetworkManager
的部分模擬,它將用存根代替buildConnection
方法。問題是部分嘲諷如OCMock所做的僅存根外部世界的消息 - 從startNetworkSync
發送buildConnection
將調用原始方法,而不是存根。
我也嘗試通過類別猴子修補NetworkManager
類。這可以工作,我可以輕鬆地用其他代碼覆蓋buildConnection
方法,並用存根替換實際的NSURLConnection
。問題是,我發現沒有簡單的方法可以在測試中獲得樁連接 - 連接是NetworkManager
的私有部分。
然後,我可以繼承NetworkManager
,覆蓋buildConnection
方法,併爲創建的連接添加一個實例變量和一個訪問器。不過,這看起來好像很多代碼。
你會如何解決這個問題?我正在尋找一種解決方案,以保持NetworkManager
類設計的清潔,並且在測試中不需要太多魔法或代碼。
好吧,我已經或多或少的這樣做了。客戶對網絡一無所知,他們只發送和接收數據,但我已經添加了向進程注入「外部」連接的方法,這有助於測試。謝謝。 – zoul 2009-05-05 07:09:41
@zoul,請粘貼您的解決方案的代碼。謝謝! – ma11hew28 2011-03-16 17:56:43