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

发表于:2017-03-31来源:51CTO作者:朱先忠点击数: 标签:单元测试iOS
waitForExpectations(timeout:5,handler:nil) } 上面这个测试的目的是检查发送到iTunes的有效的查询是否能够返回状态码200。显然,其中大部分代码与你在上面应用程序
  waitForExpectations(timeout: 5, handler: nil) 
  • 上面这个测试的目的是检查发送到iTunes的有效的查询是否能够返回状态码200。显然,其中大部分代码与你在上面应用程序中所写的一样,只是增加了如下几行︰

    1.expectation(_:)返回一个XCTestExpectation对象;此对象存储在变量promise中。此对象的其他常用名字是expectation和future。另外,description参数描述了你期望发生的事情。

    2.为了匹配description参数,您需要在异步方法的完成处理程序的成功条件闭包中调用promise.fulfill()。

    3.waitForExpectations(_:handler:)的作用是保持所有测试在运行中,直到所有的期望得以实现,或者timeout值指定的时间间隔结束——无论两者哪一种早发生都行。

    现在,再来运行该测试。如果你已经连接到互联网,则当应用程序在模拟器中加载后成功测试大约花费一秒钟时间。

    使测试失败更快一些

    测试失败会导致不少问题,但它未必花费很多时间。现在,我们来解决如何快速确定是否您的测试失败的问题。

    为了修改一下您的测试,从而导致异步操作时失败,你只需要从下面的URL中删除“itunes”一词后面的s字母即可:

    
    
    1. let url = URL(string: "https://itune.apple.com/search?media=music&entity=song&term=abba"

    运行上述测试时︰它会失败,而且此测试会花费所有指定的超时间隔时间!这是因为它的期望是请求成功——正是在这个位置调用了promise.fulfill()方法。既然请求失败,那么测试仅当在超过指定时限时才结束。

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