iOS单元测试和UI测试全面解析(19)

发表于:2017-03-31来源:51CTO作者:朱先忠点击数: 标签:单元测试iOS
现在再来运行上面的测试︰它现在大约需要一秒钟即会失败;它的失败是因为请求失败了,而不是因为测试运行超时。 修复上面的url,然后再一次运行测试

现在再来运行上面的测试︰它现在大约需要一秒钟即会失败;它的失败是因为请求失败了,而不是因为测试运行超时。

修复上面的url,然后再一次运行测试,以确认它现在能够成功通过测试。

伪造对象和交互

异步测试能够给你信心——你的代码会为一个异步API提供正确的输入。你可能也想测试您的代码能够正常工作——当它从URLSession接收输入时,或当它正确更新了UserDefaults或者CloudKit数据库时。

大多数应用程序都会与系统或库对象(你不能控制这些对象)进行交互,而与这些对象的交互测试很可能是极其缓慢的,而且不可重复的——这正违反了文章开始时FIRST原则中的两条。相反,你可以伪造这些交互——通过从代理(stub)中获取输入或更新模拟对象(Mock Object)来实现。

当您的代码依赖于一个系统或库中的对象时,通过上面伪造的办法可以创建一个假的对象来实现那一部分功能并把这种伪造注入到您的代码中。乔恩·里德的依赖性注入技术文章(https://www.objc.io/issues/15-testing/dependency-injection/)中就介绍了好几种方法来达到这一目的。

从代理(stub)中伪造输入

在本节中的测试中,你将要检查应用程序的updateSearchResults(_:)方法能够正确解析由会话下载的数据——通过检查属性searchResults.count的值是正确的来实现。SUT是视图控制器;你要使用代理(stub)技术来伪装一个会话和一些预先下载的数据。

为此,从“+”菜单下选择命令“New Unit Test Target…”并命名它为HalfTunesFakeTests。然后,在import语句的下面导入HalfTunes程序:


  1. @testable import HalfTunes 

接下来,声明SUT,并在setup()方法中创建它,且在tearDown()方法中对之进行释放:

原文转自:http://mobile.51cto.com/iphone-535758.htm