开发和测试向来就是一对冤家,再加上产品再添一把火,不吵才是奇迹呢。所以一般我们开发的时候尽可能的减少一些小的失误,比如说获取的数值为空,判定条件不充分、当然还有面对测试人员测试时将软件暴力测试,出现一些网络解析数据的延迟有时也是无法避免的。可是这些确实是一些困扰。但是为了提高开发的效率,犯这些小错误也是在所难免。综合对比了一下,觉得还是效率的提高还是离不开自己程序的健壮性,提到健壮性那就得保证程序中的模块没有问题,那当然离不开单元测试的帮助了。
单元测试是对程序中的小函数,类、或者是路径等等的直接检测,虽然不是必须,却在提高编程效率上有着很关键的作用。针对OC编程,一种面向对象的编程方式。通常测试的就是某个关键的方法(函数),或者是某个值的判定之类的。能进行单元测试的工程,耦合度上也不会很高,这样也对我们的代码的做了简化,减少了程序之间的耦合度,有助于开发高质量的代码,实现敏捷开发。
在Xcode中有其自带的OCUnit测试框架,在我们创建工程的时候即可以选择,选择完,工程中就会多出两个以Tests结尾的文件,文件是该类继承自XCTestCase类,其中包含三个方法:setUp,tearDown和testExample。
setUp方法是每个测试方法调用前执行,用于在测试前设置好要测试的方法,tearDown是每个测试方法调用后执行是在测试后将设置好的要测试的方法写在里面。testExample顾名思义就是一个示例和我们的自己创建的测试方法一样。不过测试方法必须testXXX的格式,且不能有参数,,不能有返回值,不然不会识别为测试方法。测试方法的执行顺序是字典序排序。按快捷键Command + U进行单元测试,这个快捷键是全部测试,点击之后所有的测试用例就会顺序执行。虽然测试用例在每一个工程中都会有不尽相同的写法,但是涉及到的断言却是一样的。针对测试类中的18的断言做了以下摘录,以备查用。
XCTFail(...)
任何尝试都会测试失败,...是输出的提示文字。(后面都是这样)
XCTAssertNil(expression, ...)
expression为空时通过,否则测试失败。
expression接受id类型的参数。
XCTAssertNotNil(expression, ...)
expression不为空时通过,否则测试失败。
expression接受id类型的参数。
XCTAssert(expression, ...)
expression为true时通过,否则测试失败。
expression接受boolean类型的参数。
XCTAssertTrue(expression, ...)
expression为true时通过,否则测试失败。
expression接受boolean类型的参数。
XCTAssertFalse(expression, ...)
expression为false时通过,否则测试失败。
expression接受boolean类型的参数。
XCTAssertEqualObjects(expression1, expression2, ...)
expression1和expression1地址相同时通过,否则测试失败。
expression接受id类型的参数。
XCTAssertNotEqualObjects(expression1, expression2, ...)
expression1和expression1地址不相同时通过,否则测试失败。
expression接受id类型的参数。
XCTAssertEqual(expression1, expression2, ...)
expression1和expression1相等时通过,否则测试失败。
expression接受基本类型的参数(数值、结构体之类的)。
XCTAssertNotEqual(expression1, expression2, ...)
expression1和expression1不相等时通过,否则测试失败。
expression接受基本类型的参数。
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, ...)
expression1和expression2之间的任何值都大于accuracy时,测试失败。
expression1、expression2、accuracy都为基本类型。
XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, ...)
expression1和expression2之间的任何值都小于等于accuracy时,测试失败。
expression1、expression2、accuracy都为基本类型。
XCTAssertGreaterThan(expression1, expression2, ...)
expression1 <= expression2时,测试失败。
expression为基本类型
XCTAssertGreaterThanOrEqual(expression1, expression2, ...)
expression1 < expression2时,测试失败。
expression为基本类型
XCTAssertLessThan(expression1, expression2, ...)
expression1 >= expression2时,测试失败。
expression为基本类型
XCTAssertLessThanOrEqual(expression1, expression2, ...)
expression1 > expression2时,测试失败。
expression为基本类型
XCTAssertThrows(expression, ...)
expression没抛异常,测试失败。
expression为一个表达式
XCTAssertThrowsSpecific(expression, exception_class, ...)
expression没抛指定类的异常,测试失败。
expression为一个表达式
exception_class为一个指定类
XCTAssertThrowsSpecificNamed(expression, exception_class, exception_name, ...)
expression没抛指定类、指定名字的异常,测试失败。
expression为一个表达式
exception_class为一个指定类
exception_name为一个指定名字
XCTAssertNoThrow(expression, ...)
expression抛出异常时,测试失败。
expression为一个表达式
XCTAssertNoThrowSpecific(expression, exception_class, ...)
expression抛出指定类的异常,测试失败。
expression为一个表达式
XCTAssertNoThrowSpecificNamed(expression, exception_class, exception_name, ...)
expression抛出指定类、指定名字的异常,测试失败。
expression为一个表达式
exception_class为一个指定类
最后附文档一篇,以备修正
https://developer.apple.com/legacy/library/documentation/DeveloperTools/Conceptual/UnitTesting/AB-Unit-Test_Result_Macro_Reference/result_macro_reference.html