本章由CocoaChina翻译小组成员migrant翻译微博

调试测试

所有标准的 Xcode 调试工具在执行测试时都可以使用。

测试调试工作流

要确定的第一件事情是:造成测试失败的问题是测试中的代码有 bug 还是执行的测试方法存在 bug。测试失败可以指出一些不同类型的问题—既有你的假设,正在测试中的代码需求,也有测试代码本身—所以调试测试可以横跨几个不同的工作流。然而,通常你的测试方法是相对较小和直接的,所以最好首先检查测试的目的是什么,以及它是如何实现的。

值得注意的一些常见问题:

1.测试的逻辑是否正确?实现是否正确?
测试方法用作比较基础使用的字面值,检查它们的笔误和错误始终是个好主意。

2.假设是什么?
例如,你可能在测试方法里使用了错误的数据类型,创建了一个你所测试的代码的范围错误。

3.是否使用了正确的断言来报告“通过/失败”状态?
例如,可能测试的状态需要 XTCAssertTrue 而不是 XCTAssertFalse。有时这很容易造成错误。

假设你的测试假设是正确的,并且测试方法也正确,那么错误一定在测试的代码中。现在来定位并修复它。

具体的测试调试工具

Xcode 有几个工具专门用来在你测试时定位和调试代码。

测试失败断点

在断点导航面板中(breakpoint navigator),点击 Add (+) 按钮,选择 Add Test Failure Breakpoint 设置一个特殊的断点。
调试测试 - 图1

当测试方法触发了失败断言,这个断点会终止测试的运行。在测试代码发生错误点后马上停止运行,可以让你快速的找到问题发生的位置。你可以看看 testAddition 测试方法,通过为错误字符串设置用来比较的参考标准,比较字符串被强行断言为失败。测试失败断点检测该失败断言并停止了该点测试的执行。

调试测试 - 图2

当测试中断,你也就停止了测试的执行。然后在断言前设置一个常规的断点,再次运行测试(为了简单起见,你可以在源代码编辑器侧栏中点击“Run”按钮来运行该测试),并继续调试操作来修复问题。

使用工程菜单命令运行测试

调试测试方法时,最好记住菜单命令 Project > Perform Action > Test Again 和 Project > Perform Action > Test。如果你正在测试失败发生后编辑修复代码,或运行你正在编写的测试方法,它们提供了一个便捷的方式来测试最后一个方法。更多信息请查看 Using the Product menu。当然你也可以始终使用测试导航面板或源代码编辑器侧边栏中的“Run”按钮来运行测试,都很方便。

辅助编辑器类

辅助编辑器分类中增加了两个专门的分类来运行特殊的测试。

调试测试 - 图3

1.Test Callers category。如果你修复了一个引起应用测试失败的方法,你可能会想要检查该方法在其他测试中是否被调用并成功运行。带着这个问题,在源代码编辑器中打开辅助编辑器,并从菜单中选择 Test Classes 分类。你可以从下拉菜单定位到任何调用它的测试方法,这样你就可以运行它们,以确保你的修复没有造成其它问题。

2.Test Classes category。该分类和 Test Callers 类似,不过显示的是包含测试方法的类列表,这些方法与主源码编辑器中编辑的类相关。对于增加测试来说,这是个好机会,例如,给还没有被并入测试方法中的新方法增加测试。

测试时的异常断点

通常,当异常被异常断点捕获时就会终止测试执行,所以测试运行时通常会关闭异常断点以避免不适当的定位抛出的断点。当你寻找一个特定的问题并想终止测试来修复它时可以打开异常断点。