运行您的所有测试(按下组合键Command+U),然后打开报告导航器(按下组合键Command+8)。按执行时间先后选择(By Time,见下图)列表中最上面的一项,然后再选择“Coverage”(覆盖)选项卡。
你可以单击如下图展开的三角形图标来观察SearchViewController.swift文件中的函数列表︰
你可以把鼠标悬停在updateSearchResults(_:)方法附近的蓝色的Coverage(覆盖率)条上观察到对应的覆盖率为71.88%。
单击该函数对应的箭头按钮来打开源文件,并定位到该函数。当你的鼠标移到右边栏中的覆盖率注释上时,代码段将突出显示为绿色或红色︰
覆盖率注释上的信息显示出一个测试中命中每个代码段的次数。注意,没有被调用到的代码段部分突出显示为红色。正如你所期望的,for循环运行3次,但没有一次是沿着错误路径执行的。为了提高此函数的代码覆盖率,你可以复制abbaData.json,然后修改它,使其会导致不同的错误——例如,将“results”更改为“result”来测试执行到打印语句print("Results key not found in dictionary")的情况。
100%覆盖?
争取实现100%的代码覆盖率你可知道应该付出怎样的努力吗?如果你使用谷歌搜索引擎搜索“100% unit test coverage”的话,你会搜索到有赞同的也有反对的等多种观点,以及围绕100%覆盖率的大量争论。其中,持反对看法的认为最后的10-15%并不重要——不值得为之付出努力;而持赞同看法的认为最后的10-15%极其重要——因为它很难测试。再使用谷歌搜索引擎搜索“hard to unit test bad design”可以找到颇有说服力的论据——无法验证的代码是一种更深层次的设计问题(https://www.toptal.com/qa/how-to-write-testable-code-and-why-it-matters)。进一步的思考可能导致的结论是测试驱动开发(http://qualitycoding.org/tdd-sample-archives/)是软件开发过程中必须要走的路。
原文转自:http://mobile.51cto.com/iphone-535758.htm