单元测试
- 软件测试分为以下几种
- 单元测试
- 测试范围最小
- 仅仅测试一个小单元,比如: 一个方法/函数.
- 保证软件的每一个函数每一个方法都是对的,对软件的稳定性有好处.
- 集群测试
- 测试范围比较大.
- 测试项目中的所有功能,人工点击测试.
- 压力测试
- 模拟大批量数据(用户),进行测试.
- 单元测试
如何进行单元测试
- 创建一个项目UnitTest,勾选单元测试项和单元UI测试项
- 打开项目-> 点击查看UnitTestTests.m文件
- 发现UnitTestTests类继承自XCTestCase类
- 只要一个类继承自XCTestCase,那么这个类就具备了单元测试的功能.
- 我们就在这个类里面写一些测试方法来测试.
- 创建一个ZHMathTool类,添加两个类方法.(先不实现这两个方法)
- 在UnitTestTests类中写测试用例(即写测试方法来测试ZHMathTool类的两个类方法是否正确)
- 单元测试只有.m文件,单元测试可以整个项目都写在XCode默认的那个文件中.也可以一个类对应一个单元测试类(创建文件时选择单元测试类就行了)
- 写一个单元测试条件
- 对象方法
- 没有返回值
- test开头
- 如何运行你写的测试方法?
- 单一测试: 点击左边的菱形即可
- 全体测试: 快捷键: command + U 运行整个项目的所有测试用例.
- 单元测试原理:
- 拿到已知的正确结果,与调用函数比对,真确则通过,反之,不通过.因此,往往只用在数据层.
- 单元测试的颜色:
- 红色: 错误
- 绿色: 通过
- 单元测试的好处:
- 更直观,通过颜色就可以找到代码错误
- 测试代码跟应用代码独立出来了,都放在了UnitTestTests中
- 轻量级,不需要把整个项目跑起来,直接运行某个方法.
- 打包上架时不会打包上架测试代码
-
代码如下: UnitTestTests.m
#import <XCTest/XCTest.h> #import "ZHMathTool.h" @interface UnitTestTests : XCTestCase @end @implementation UnitTestTests //每个测试用例开始之前调用 - (void)setUp { [super setUp]; // Put setup code here. This method is called before the invocation of each test method in the class. } //每个测试用例测试完毕调用这个. - (void)tearDown { // Put teardown code here. This method is called after the invocation of each test method in the class. [super tearDown]; } /* 写一个单元测试条件 1. 对象方法 2. 没有返回值 3. test开头 如何运行你写的测试方法?点击左边的菱形即可 单元测试的颜色: 1. 红色: 错误 2. 绿色: 通过 单元测试的好处: 1. 更直观,通过颜色就可以找到代码错误 2. 测试代码跟应用代码独立出来了,都放在了UnitTestTests中 3. 轻量级,不需要把整个项目跑起来,直接运行某个方法. 4. 打包上架时不会打包上架测试代码 单元测试原理: 拿到已知的正确结果,与调用函数比对,真确则通过,反之,不通过.因此,往往只用在数据层. 快捷键: command + U 运行整个项目的所有测试用例. 单元测试只有.m文件,单元测试可以整个项目都写在XCode默认的那个文件中.也可以一个类对应一个单元测试类(创建文件时选择单元测试类就行了) */ - (void)testMathTool { int sum = [ZHMathTool sumNum1:3 andNum2:5]; //断言:猜测/估计 //就是做一个断言,如果断言成立,说明方法正确,否则错误 //断言sum = 0,否者+(int)sumNum1:(int)num1 andNum2:(int)num2;方法错误 XCTAssertEqual(8, sum); //断言这个结果是正确的 XCTAssertTrue([ZHMathTool isPassWithNum:100]); //断言为nil // XCTAssertNil(<#expression, ...#>) } - (void)testExample { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. } //测试方法的性能的,方法调用时间(一运行就回弹出block中代码调用的时间) - (void)testPerformanceExample { // This is an example of a performance test case. [self measureBlock:^{ // Put the code you want to measure the time of here. //这里存放你要测试的代码 [ZHMathTool circleFunction]; }]; } @end