gpt4 book ai didi

objective-c - 使用 NSURLConnection 进行单元测试

转载 作者:搜寻专家 更新时间:2023-10-30 20:04:59 26 4
gpt4 key购买 nike

我想测试一段使用网络的代码(具体来说是 NSURLConnection 类)。代码(我们称之为 NetworkManager)看起来有点像这样:

- (id) buildConnection
{
// some more code and then:
return [NSURLConnection …];
}

- (void) startNetworkSync
{
id connection = [self buildConnection];
//…
}

在单元测试中,我想摆脱网络,即。用模拟替换 NSURLConnection 对象。我该怎么做?

我已经尝试创建 NetworkManager 的部分模拟,它将用 stub 替换 buildConnection 方法。问题是 OCMock 完成的部分模拟仅 stub 来自外部世界的消息——从 startNetworkSync 发送 buildConnection 调用原始方法,而不是 stub 。

我还尝试通过类别对 NetworkManager 类进行猴子修补。这行得通,我可以轻松地用其他代码覆盖 buildConnection 方法,并将真正的 NSURLConnection 替换为 stub 。问题是我没有找到在测试中获得 stub 连接的简单方法——该连接是 NetworkManager 的私有(private)部分。

然后我可以将 NetworkManager 子类化,覆盖 buildConnection 方法并为创建的连接添加实例变量和访问器。不过,这似乎有很多代码。

你会如何解决这个问题?我正在寻找一种解决方案,它可以使 NetworkManager 类设计保持整洁,并且在测试中不需要太多魔法或代码。

最佳答案

这就是依赖注入(inject)旨在解决的问题;如果您使用 startNetworkSyncWithConnection:(NSURLConnection*) 代替,您可以使用模拟连接轻松测试该方法。如果您不想为您的客户端更改 API,您甚至可以将 startNetworkSync 保留为包装器,它除了使用 [self buildConnection] 调用新方法外什么都不做争论。

关于objective-c - 使用 NSURLConnection 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/817282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com