iOS 单元测试- Xcode 7测试工具XCTest学习

1. 单元测试简介

1.1、Unit Testing: 单元测试

测试这个词很容易理解,那么什么是单元(Unit)呢?

一个单元指的就是应用程序中可以测试的最小单元。

一组源代码可以测试,一般要求有明确的输入与输出。因此一般来说源代码中明确的包含输入输出的每一个方法被认为一个测试的单元(一个case)。

注意,这里的输出并不局限于方法的返回值对输入参数的改变,也包括方法在执行过程中改变的任何数据。

单元测试在程序里面可以理解一个模块一个方法,在每个可能存在的模块都进行测试,确保每个模块都没有问题,从而提高整体程序的质量。


1.2、单元测试的目的

单元测试的目的是将程序中所有的源代码,隔离成最小的可测试单元,以确保每个单元的正确性,如果每个单元都能保证正确,就能保证应用程序整体相当程度的正确性。另一方面测试脚本本身就是被测试代码的实际使用代码,这对于开发者理解被测试单元的使用是用帮助的。

测试是分黑盒测试和白盒测试(概念此处不在解释),单元测试其实就是一种白盒测试,开发者对现有已经实现的模块自己写对应测试脚本进行测试,这中间还包含测试用例的设计。相对来说还是由开发者自己来完成白盒测试,然后在交由测试团队进行黑盒测试,这样也更加有助于提升测试流程的完整性,最终提高产品的质量。

单元测试的内容:

  • 单元测试的测试目的
  • 模块接口测试
  • 局部数据结构测试
  • 路径测试
  • 错误处理测试
  • 边界测试

在现有的开发工作中,我们一般都会忽略掉单元测试的重要性,功能开发完成以后开发者拿到现有的测试用例,直接针对每条用例进行手工的测试,测试通过就进行提测,之后测试人员还是重复手工测试的流程、数据的mock、专项测试等,这样以来白盒测试的流程有时间份量会变的很低,开发人员不知道自己模块代码的覆盖路问题,更多的时间可能某些代码一直到到上线都从来没有跑过,以至于到了真实环境下会产生一些意想不到的问题,这样以来风险极高,整体来说单元测试还是至关重要的。

下面介绍一下Xcode7 中现有的一些测试工具:


2. Xcode7中的UnitTest

2.1、XCTest介绍

本文主要基本Xcode7来讲解。

最新的Xcode7中是包含了UITest UnitTest工具的,这个可以在你创建工程的时间勾选对应的选项,也可以直接通过addTarget的形式来完成,


2.1、XCTestCase简介

如果项目创建的时间勾选了UnitTest(从名字上看就是Apple提供的官方的一个单元测试工具) ,我们可以看到工程里面是多了一个目录,默认多了一个类, 如图:

选择XCTest:

iOS 单元测试- Xcode 7测试工具XCTest学习_第1张图片

XCTest时Apple官方提供一个测试工具,一个内置的测试框架,从工程里面可以看到,一个“应用名称”的group,我们直接可以使用commond+R 来远行,一个测试的target我们可以使用commond+U来远行测试target,在测试target的目录下会有一个默认的“应用名称”+Test的类,这个类只有.m没有.h,继承于XCTestCase,使用commond+U即可运行。

默认测试类里面有以下方法:

//方法在XCTestCase的测试方法调用之前调用,可以在测试之前创建在test case方法中需要用到的一些对象等
- (void)setUp ;
//当测试全部结束之后调用tearDown方法,法则在全部的test case执行结束之后清理测试现场,释放资源删除不用的对象等
- (void)tearDown ;
//测试代码执行性能
- (void)testPerformanceExample

2.2、XCTestCase使用

XCTestCase的初始化不是用户控制的,开发者无需手动针对XCTestCase的subclass进行 alloc 、init或者调用静态方法初始化的操作,针对一个功能块的单元测试(针对某个class),只需要单独给为这个类创建一个继承于XCTestCase,在这个文件内实现上述基本函数以后(一半系统会默认创建这三个函数),其实的逻辑只需要开发者自行定义以“test”开头的函数,然后在内部实现自己针对某个函数、返回数值结果、操作等的测试脚本即可,commond+U执行的时间,单元测试会自动执行这些test打头的函数,当函数头上出现蓝色的标记则表明测试通过,否则直接报红色错误。

XCTest测试范畴:

  • 基本逻辑测试处理测试
  • 异步加载数据测试
  • 数据mock测试

XCTest常用基本测试工具

XCTest常用的一些判断工具都是以XCT开头的,如:

  //断言,最基本的测试,如果expression为true则通过,否则打印后面格式化字符串
  XCTAssert(expression, 

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