单元测试中的存根网络调用

确保您知道您的回应

几年前,我被要求支持公司的其他分支机构。 他们的iOS开发人员很快就离开了,他正在开发的应用程序即将完成。 我去那儿修复了大约10个错误……它以50多个问题结束,但是我们都知道,这在开发过程中很正常。 尤其是当您有一位对利润非常挑剔的出色设计师时。

无论如何..我到了那里,想测试一些网络代码。 我以为我既年轻又年轻(大约一年前才开始使用Kiwi),所以我可以使用这些方法,然后继续前进。 我的一个同事不太喜欢这个主意。 她建议使用当前存在的依赖项,而不要引入新的依赖项(在此期间,我们使用的是XCTest,而不是Kiwi)。

那么她的解决方案是什么? 她已经在使用KIF,并且针对后端运行UI测试并不好玩。 而是使用OHHTTPStubs。 使用此库,您可以拦截网络请求并返回所需的任何内容。 我的猜测是,它在NSURL上使用方法刷新进行拦截,但是如果有库,为什么要自己做。

如何使用

编写拦截器非常容易。 只需指定要拦截的主机和路径并返回响应即可。 我倾向于在包含我的拦截器的OHHTTPStubs上使用类方法创建扩展。

响应是您的JSON对象。 根据要返回的内容,您可以使用库提供的初始化程序。 我还创建了一个匹配器,以便于检查是否调用了正确的网址。 OHHTTPStubs提供了一些,但是有时您必须编写自己的。 这是通过创建OHHTTPStubsTestBlock来完成的。 这是一个闭包,将在其中传递一个RequestObject并返回一个Bool。

与往常一样,要设置我们的套件,我们可以使用beforeEach或beforeSuite。 只是不要忘记事后清理! 所以请不要忘记:

  OHHTTPStubs.removeAllStubs() 

结论

我喜欢这个图书馆。 这是您进行单元测试所需的全部。 几个月前,我向团队介绍了它,从那时起,我们的网络测试就针对OHHTTPStubs进行了。

使用OHHTTPStubs使我们能够测试整个应用程序,而不必在生产系统中引入任何测试代码。 这样,我们可以确定,只要后端api不变,我们的应用程序就会按照我们期望的方式运行。

下一步:TDD向后

上一篇:测试苹果MVC