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这个类里面好了。具体实现的方法是在接收到的字符串用[]包住,然后返回,代码如下:

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

时间: 2024-08-27 10:24:02

iOS开发 使用OCUnit对程序进行单元测试(UnitTest)的相关文章

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

所谓单元测试(又称为模块测试, Unit Testing)就是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作. 其实在我们开发的程序实现某个功能的时候我们也有进行测试.只不过,你是在项目代码中直接写的方法,而且在测试的时候,也是点点点,点到相应的界面才触发相应的方法,进行测试,这测试效率,想想也是醉了,不过还好能正常测试,但是如果你想控制不同的输入参数呢?好,你说直接写入到程序.但是,你测试完成了之后呢?好,你说那就注释掉啊.但是,如果后面你改动了又需要再测试一此呢?其实,说了这么

【iOS开发】如何在程序出错崩溃时快速定位到具体出错代码行

[写在前面]最近在做iOS的开发.之前开发Android应用程序的时候程序出错时很容易根据logcat信息获取错误类型并且定位到具体出错的代码行,但是最近在做iOS的时候发现Xcode无法定位到具体错误行.搜索了一下,找到了解决办法,还挺简单. 步骤1 在xcode添加一个通用断点就行了.方法如下: 点击项目导航断点那,如图 步骤2 点击+号: 一步步按上面图完成操作. 再运行程序 自动就断点到这里来了, log信息是: 1 2013-05-20 11:14:19.635 GestureReco

【iOS开发-119】ipa打包、单元测试test、本地通知UILocalNotification

(1)ipa打包,可以用Xcode,也可以用iTunes,用后者比较快. 具体教程:使用XCode和iTunes打包ipa i OS_ipa打包的方法 (2)单元测试(一般用于测试某一个方法是否可行等等) --轻量化 --和程序target是单独分开的 --比较直观快读地知道测试结果 相对而言,还有集群测试(一般测试一些模块和功能).压力测试(加大数据或者用户进行测试) (3)本地通知 #import "ViewController.h" @interface ViewControll

李洪强漫谈iOS开发[C语言-033]-程序的结构

IOS 开发大牛首选之路

学习ios(必看经典)牛人40天精通iOS开发的学习方法 描述 这是一套从一个对iOS开发感兴趣的学员到iOS开发高手的系统.专业的课程体系.以培养企业开发真正需要的人才为目标,每个知识点都用案例来讲解.也适合想提升技能的已从事iOS开发的工作人员以最短时间内提升技能的从业者. 目标 通过本系列课程的学习,希望使一个对iOS开发感兴趣,想从事iOS开发的学员,成为一名真正iOS开发人员,iOS从业者,iOS技术大牛,最重要的是学会解决开发中遇到困难的方法. 建议 建议学员,尤其是初学者,一定要打

用户登陆状态,ios开发用户登陆

IOS开发之记录用户登陆状态,ios开发用户登陆 上一篇博客中提到了用CoreData来进行数据的持久 化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户 的登陆状态.例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了.那么我们在App开发中如何记录用户的登陆状态呢?之前在用PHP或者 Java写B/S结构的东西的时候,我们用Session来存储用户的登陆信息,Session是存在服务器上仅在一

IOS开发之记录用户登陆状态,ios开发用户登陆

IOS开发之记录用户登陆状态,ios开发用户登陆 上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了.那么我们在App开发中如何记录用户的登陆状态呢?之前在用PHP或者Java写B/S结构的东西的时候,我们用Session来存储用户的登陆信息,Session是存在服务器上仅在一次回话

iOS开发中的单元测试(三)——URLManager中的测试用例解析

本文转载至 http://www.cocoachina.com/cms/plus/view.php?aid=8088 此前,我们在<iOS开发中的单元测试(一)&(二)>中介绍了从使用者的角度对比当下比较流行的两款单元测试框架OCUnit和GHUnit,这篇文章中我们将介绍一款导航控件URLManager. URLManager是一个基于UINavigationController和UIViewController,以URL Scheme为设计基础的导航控件,目的是实现ViewCont

iOS开发:XCTest单元测试(附上一个单例的测试代码)

测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编写了一段代码,如何编译运行,查看结果是否正确,很多时候,还得自己想很多特殊的(比如说零值,边界值)测试数据来检测所写代码.算法是否正确.那个时候,感觉还好,比较输出只是只是控制台的一个简单的数字或者字符.在学习iOS开发中,很多时候也是要测试的,这种输出是必须在点击一系列按钮之后才能在屏幕上显示出来