当我们使用SwiftUI创建界面时,其背后理念是创建一个可以轻松映射到界面元素的视图模型。在这种场景下,大多数测试都可以在模型上完成,而我们只需使用标准的单元测试框架就能编写直观、高效的测试。为了测试模型和视图之间的数据绑定,开发者会使用XCUITest,这个自动化框架会启动完整的应用并远程控制界面,它能达到目的,测试效果也还算稳定,但是耗时很长。
想要更快地给SwiftUI编写单元测试,您可以试试ViewInspector开源库,它利用迅速开放的反射API访问SwiftUI创建的底层视图。因此,基于ViewInspector的测试只需要实例化一个SwiftUI视图,定位到需要测试的界面元素,就可以对元素进行断言测试,而像点击这种基本的交互也可以被测试到。如同许多别的UI测试框架,ViewInspector提供了定位界面元素的API,您可以指定路径,通过视图层级结构找到元素,也可以使用一系列查找方法定位元素。基于ViewInspector的测试往往比用XCUITest的测试更简单,运行起来也要快得多。不过,需要注意的是,尽管用ViewInspector写测试很简单,您也可能因此过度测试——测试简单的一对一映射逻辑就像在复印代码,没有太大意义。此外,即便ViewInspector降低了测试SwiftUI代码的难度时,也请记住要把大部分逻辑放在模型中实现。