我想测试一段使用网络的代码(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