简介
单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块的最小单位来进行正确性检验的测试工作。
在开发中我们没必要为了测试某个小模块去编译我们的程序,然后去等待模拟器启动,在进入你需要验证的模块去。假如你的项目很大,编译等老半天,你的电脑没那么快,这个步骤下来非常浪费时间。而使用单元测试能节约我们的时间,提高开发效率,对于越大的项目效果越明显。
注意点:
1.单元测试是以代码测试代码
2.红灯/绿灯迭代开发
3.在日常开发中,数据大部分来自于网络,很难出现所以得‘边界数据’!,如果没有测试所以条件就上架就有可能会造成闪退
4.可以自己创建使用的例子数据,来专门检查边界
5.单元测试不是靠NSLog来测试的,NSLog是程序员测试的笨方法,使用‘断言’来测试的,提前预判条件必须满足!
提示:
1.不是所有的方法都需要测试
例如:私有方法不需要测试,只有暴露在.h的方法需要测试!面向对象有一个原则:开闭原则
2.所有跟UI有关的都不需要测试,也不好测试
MVVM,把小的业务逻辑代码封装处理,变成可以测试的代码,让程序更加健壮
3.一般而言,代码的覆盖度大概在50%~70%
使用
创建工程
对新项目创建
3E17F908-865D-41BB-A57F-3E9671BF1E8C.png
对于老项目创建
在Xcode导航中选择File-->new-->target-->iOS-->iOS Unit Testing Bundle
3B500F1A-5BB0-4F38-B342-67B70570763E.png
创建测试类
新建一个实体Person类和一个测试类PersonTexts
8247908F-AADE-48CC-8E48-37E9963B5632.png
E904C866-D4D0-452C-ADDA-0A46BA10FEDD.png
D0C26F5C-57CA-46F9-AA49-1ADB1BEC5FE3.png
测试类系统提供方法介绍
457BE767-4B1D-4955-A157-72608197DF60.png
0D70F499-DE3A-4A7B-8D31-1E546CFEA322.png
使用介绍
测试Person模型
58B070D3-0C90-471E-9BCB-6EFDAD484B65.png
28B9C580-F1AD-4AE3-A500-5CF30AA6CC76.png
新建testNewPerson方法,注意单元测试都是以test开头
3795BE0A-2122-4B64-B217-2D62DF861824.png
点击箭头指向的方法运行测试,绿灯代码通过红灯代表错误不通过。
7F9BE3FE-B342-4034-A14E-858ED1AA0BBD.png
ABB630EF-2AE6-40C6-802E-CA3872D35369.png
其它的断言测试
XCTFail(format…) //生成一个失败的测试;
XCTAssertNil(a1, format...) //为空判断,a1为空时通过,反之不通过;
XCTAssertNotNil(a1, format…) //不为空判断,a1不为空时通过,反之不通过;
XCTAssert(expression, format...) //当expression求值为TRUE时通过;
XCTAssertTrue(expression, format...) //当expression求值为TRUE时通过;
XCTAssertFalse(expression, format...) //当expression求值为False时通过;
XCTAssertEqualObjects(a1, a2, format...) //判断相等,[a1 isEqual:a2]值为TRUE时通过,其中一个不为空时,不通过;
XCTAssertNotEqualObjects(a1, a2, format...) //判断不等,[a1 isEqual:a2]值为False时通过;
XCTAssertEqual(a1, a2, format...) //判断相等(当a1和a2是 C语言标量、结构体或联合体时使用,实际测试发现NSString也可以);
XCTAssertNotEqual(a1, a2, format...) //判断不等(当a1和a2是 C语言标量、结构体或联合体时使用);
XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...) //判断相等,(double或float类型)提供一个误差范围,当在误差范围(+/-accuracy)以内相等时通过测试;
XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) //判断不等,(double或float类型)提供一个误差范围,当在误差范围以内不等时通过测试;
XCTAssertThrows(expression, format...) //异常测试,当expression发生异常时通过;反之不通过;
XCTAssertThrowsSpecific(expression, specificException, format...) //异常测试,当expression发生specificException异常时通过;反之发生其他异常或不发生异常均不通过;
XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...) //异常测试,当expression发生具体异常、具体异常名称的异常时通过测试,反之不通过;
XCTAssertNoThrow(expression, format…) //异常测试,当expression没有发生异常时通过测试;
XCTAssertNoThrowSpecific(expression, specificException, format...) //异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过;
XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...) //异常测试,当expression没有发生具体异常、具体异常名称的异常时通过测试,反之不通过。