简介
单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块的最小单位来进行正确性检验的测试工作。
在开发中我们没必要为了测试某个小模块去编译我们的程序,然后去等待模拟器启动,在进入你需要验证的模块去。假如你的项目很大,编译等老半天,你的电脑没那么快,这个步骤下来非常浪费时间。而使用单元测试能节约我们的时间,提高开发效率,对于越大的项目效果越明显。
注意点:
1.单元测试是以代码测试代码
2.红灯/绿灯迭代开发
3.在日常开发中,数据大部分来自于网络,很难出现所以得‘边界数据’!,如果没有测试所以条件就上架就有可能会造成闪退
4.可以自己创建使用的例子数据,来专门检查边界
5.单元测试不是靠NSLog来测试的,NSLog是程序员测试的笨方法,使用‘断言’来测试的,提前预判条件必须满足!
提示:
1.不是所有的方法都需要测试
例如:私有方法不需要测试,只有暴露在.h的方法需要测试!面向对象有一个原则:开闭原则
2.所有跟UI有关的都不需要测试,也不好测试
MVVM,把小的业务逻辑代码封装处理,变成可以测试的代码,让程序更加健壮
3.一般而言,代码的覆盖度大概在50%~70%
使用
创建工程
对新项目创建
对于老项目创建
在Xcode导航中选择File-->new-->target-->iOS-->iOS Unit Testing Bundle
创建测试类
新建一个实体Person类和一个测试类PersonTexts
测试类系统提供方法介绍
使用介绍
测试Person模型
新建testNewPerson方法,注意单元测试都是以test开头
点击箭头指向的方法运行测试,绿灯代码通过红灯代表错误不通过。
其它的断言测试
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没有发生具体异常、具体异常名称的异常时通过测试,反之不通过。