iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)

    所谓单元测试(又称为模块测试, Unit Testing)就是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。

    其实在我们开发的程序实现某个功能的时候我们也有进行测试。只不过,你是在项目代码中直接写的方法,而且在测试的时候,也是点点点,点到相应的界面才触发相应的方法,进行测试,这测试效率,想想也是醉了,不过还好能正常测试,但是如果你想控制不同的输入参数呢?好,你说直接写入到程序。但是,你测试完成了之后呢?好,你说那就注释掉啊。但是,如果后面你改动了又需要再测试一此呢?其实,说了这么多,就是想说,在你的有效工程代码外写测试代码,这就是单元测试了,完成后,一个Command+U直接进入入口进行代码测试。

    接下来就是怎么进行代码测试,这个网络一搜一大堆,但是都是在那个test.m文件里面直接写写写得节奏,看了你肯定会问,就在这里写一些判断1+1=?2的代码?这什么情况。其实不是这样子的。按照目前Xcode的版本创建是这样子的:

    1、直接创建项目,默认就已经有了那个所谓的TestOCUnitTestTests.m文件,创建完成之后如下,你直接看到了一个TestOCUnitTestTests.m文件,那个就是放测试代码的文件了。

iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)

    2、点击你平时运行项目的那个三角形右边的TestOCUnitTest可以看到新出来三个选项,new一个Scheme,然后把项目切换到TestOCUnitTestTests里面,按住Command+U,会弹出一个Test Succeeded的提示框,表示成功。

    3、接下来说说怎么测试我们项目里面的某个类的方法,我们随便在自己的某个类新建一个方法,我就选在MasterViewController这个类里面好了。具体实现的方法是在接收到的字符串用[]包住,然后返回,代码如下:

- (NSString *)getTestString:(NSString *)normalStr{
    return [NSString stringWithFormat:@"[%@]",normalStr];
}


    记得声明成外部可调用方法!

    4、在TestOCUnitTestTests.m文件里面调用这个方法:

- (void)testExample {
    
    //1、找一个你需要进行单元测试的类,实例化
    MasterViewController *controller = [[MasterViewController alloc]init];
    
    NSString *normalStr = @"Objective-C";
    NSString *expectStr = @"[Objective-C]";
    
    //2、调用该对象需要进行单元测试的方法
    NSString *returnStr = [controller getTestString:normalStr];
    //3、断言你预想中得返回值及实际返回值是否符合
    NSLog(@"Is MasterViewController testStr getRightStr:");
    XCTAssertEqualObjects(expectStr,returnStr, @"pass");
}

可以运行之后,可以看到方法左边打了个钩钩,说明测试是通过的。(PS:写在TestOCUnitTestTests.m里面的所有方法会默认执行,不用你手工去调用

    如果你测试的是你项目中的其他方法,那么直接在在TestOCUnitTestTests.m里面直接创建测试方法,传参后断言测试返回数据是否跟预期的一样就行了,以上就是单元测试的使用。

    对于一些常用的断言测试函数,我直接拷贝过来好了,如下所示:

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语言标量、结构体或联合体时使用, 判断的是变量的地址,如果地址相同则返回TRUE,否则返回NO); 

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没有发生具体异常、具体异常名称的异常时通过测试,反之不通过



你可能感兴趣的:(ios,单元测试,unittest)