zoukankan      html  css  js  c++  java
  • iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)

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

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

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

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

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

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

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

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    - (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没有发生具体异常、具体异常名称的异常时通过测试,反之不通过

    转自http://my.oschina.net/caijunrong/blog/492932

  • 相关阅读:
    饿了么ElementUI table遇到的问题
    Window命令行杀进程
    网络监控流量工具
    记一次Linux系统被入侵的过程
    sftp ftp文件同步方案
    清除oracle归档日志
    TCP连接复用
    Sftp搭建与配置参考
    setfacl命令
    tips
  • 原文地址:https://www.cnblogs.com/wuxiufang/p/5420581.html
Copyright © 2011-2022 走看看