在我们实际开发中,是比较少会使用Xcode提供的框架写测试用例的,所以这里只是简单介绍一下。
1. 使用UnitTest
来做单元测试
可以在Xcode新建项目时或者在target处去添加这个功能,具体使用可以参考文章 t.zoukankan.com/fengmin-p-5…
2. 使用Code Coverage
查看单元测试的代码覆盖率
在上述单元测试的情况下,还可以通过Code Coverage
查看单元测试的代码覆盖率。
具体使用可以参考文章
t.zoukankan.com/fengmin-p-5…
3. UITest测试
通过UIAutomation
来完成自动化UI测试,它的测试用例是javascript写的(Instruments中提供了该功能),这个过程深奥繁琐,需要自行编写对应的测试脚本,速度慢,学习成本高。
Xcode 7 Apple提供了UITest框架,这个主要是用来测试UI的,UnitTest涌来测试功能逻辑代码,UITest专门用来测试UI。
具体使用可以参考文章
t.zoukankan.com/fengmin-p-5…
4. 可能会遇到的问题
- 有趣的是,如果我们项目使用cocoapods来继承的,我们没办法运行单元测试,这个时候我们需要再podfile中添加
target '单元测试target名' do
inherit! :search_paths
end
target 'UI-单元测试target名' do
inherit! :search_paths // 明确指定继承于父层的所有pod,默认就是继承的
end
- 在我们运行UItest的时候可能会遇到错误
test运行失败的问题,报错:
The bundle “XXXXUITests” couldn’t be loaded. Try reinstalling the bundle
解决办法: 第一步:修改test的target对应的depolyment编译设置跟项目target一样。 第二步:修改项目的podfile文件, 正确的是如下样式: 关键:DemoUITests和use_frameworks!不在同一层级
platform :ios, '11.0'
target 'Demo' do
use_frameworks!
pod 'Masonry'
target 'Demo_Tests' do
inherit! :search_paths
end
end
target 'DemoUITests' do
inherit! :search_paths
end
第三步:重新pod一下就好了
- 上述问题解决了之后,系统自动添加的UItest是可以运行的,对于我们自己手写的test方法中通过点击红点recording后Xcode生成的代码却不能运行,报错
UserInfo={NSLocalizedDescription=Application org.cocoapods.demo.Demo is not running}: Application org.cocoapods.demo.Demo is not running
这个时候我们应该在自动生成的代码中添加一句app.launch()
,如下
func testalert() {
let app = XCUIApplication()
app.launch() // 这句是手动添加的
app.buttons["Toast-纯文字"].tap()
app.buttons["Sheet"].tap()
app.buttons["common icon close"].tap()
app.buttons["Toast-成功"].tap()
}
- 性能测试设置基准线
No baseline average for Time.
如果需要进一步了解并实践,可以了解这篇文章 juejin.cn/post/684490… iOS单元测试简介和使用