单元测试

  1. 软件测试分为以下几种
    1. 单元测试
      1. 测试范围最小
      2. 仅仅测试一个小单元,比如: 一个方法/函数.
      3. 保证软件的每一个函数每一个方法都是对的,对软件的稳定性有好处.
    2. 集群测试
      1. 测试范围比较大.
      2. 测试项目中的所有功能,人工点击测试.
    3. 压力测试
      1. 模拟大批量数据(用户),进行测试.

如何进行单元测试

  1. 创建一个项目UnitTest,勾选单元测试项和单元UI测试项
  2. 打开项目-> 点击查看UnitTestTests.m文件
  3. 发现UnitTestTests类继承自XCTestCase类
    1. 只要一个类继承自XCTestCase,那么这个类就具备了单元测试的功能.
    2. 我们就在这个类里面写一些测试方法来测试.
  4. 创建一个ZHMathTool类,添加两个类方法.(先不实现这两个方法)
  5. 在UnitTestTests类中写测试用例(即写测试方法来测试ZHMathTool类的两个类方法是否正确)
  6. 单元测试只有.m文件,单元测试可以整个项目都写在XCode默认的那个文件中.也可以一个类对应一个单元测试类(创建文件时选择单元测试类就行了)
  7. 写一个单元测试条件
    1. 对象方法
    2. 没有返回值
    3. test开头
  8. 如何运行你写的测试方法?
    1. 单一测试: 点击左边的菱形即可
    2. 全体测试: 快捷键: command + U 运行整个项目的所有测试用例.
  9. 单元测试原理:
    1. 拿到已知的正确结果,与调用函数比对,真确则通过,反之,不通过.因此,往往只用在数据层.
  10. 单元测试的颜色:
    1. 红色: 错误
    2. 绿色: 通过
  11. 单元测试的好处:
    1. 更直观,通过颜色就可以找到代码错误
    2. 测试代码跟应用代码独立出来了,都放在了UnitTestTests中
    3. 轻量级,不需要把整个项目跑起来,直接运行某个方法.
    4. 打包上架时不会打包上架测试代码
  12. 代码如下: 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
    
    
Table of Contents