天天看点

IOS:UITest单元测试

UI Tests是一个自动测试UI与交互的Testing组件

UI Tests有什么用?

它可以通过编写代码、或者是记录开发者的操作过程并代码化,来实现自动点击某个按钮、视图,或者自动输入文字等功能。

UI Tests的重要性

在实际的开发过程中,随着项目越做越大,功能越来越多,仅仅靠人工操作的方式来覆盖所有测试用例是非常困难的,尤其是加入新功能以后,旧的功能也要重新测试一遍,这导致了测试需要花非常多的时间来进行回归测试,这里产生了大量重复的工作,而这些重复的工作有些是可以自动完成的,这时候UI Tests就可以帮助解决这个问题了。

XCTestCase简介

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

使用方法

如果项目创建的时勾选了UnitTest,如图

IOS:UITest单元测试

如果是已有的项目,可以通过添加target的方式添加一个UI Tests,点击xcode的菜单,找到target栏

IOS:UITest单元测试

在Test选项中选择Cocoa Touch UI Testing Bundle

IOS:UITest单元测试

创建测试代码

手动创建测试代码

打开测试文件,在testExample()方法中添加测试代码,默认测试类里面有以下方法:

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

XCTestCase使用

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

XCTest常用工具:

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

  //Bool测试:  
  XCTAssertTrue(expression, format...)
  XCTAssertFalse(expression, format...)

  //相等测试
  XCTAssertEqual(expression1, expression2, format...)
  XCTAssertNotEqual(expression1, expression2, format...)
  XCTAssertEqualObjects(expression1, expression2, format...)
  XCTAssertNotEqualObjects(expression1, expression2, format...)
  XCTAssertGreaterThan(expression1, expression2, format...)
  XCTAssertGreaterThanOrEqual(expression1, expression2, format...)
  XCTAssertLessThan(expression1, expression2, format...)
  XCTAssertLessThanOrEqual(expression1, expression2, format...)


  //double float 对比数据测试使用
  XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...)//expression1和expression2之间差别大于accuracy时输出format语句
  XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...)//expression1和expression2之间差别小于或者等于accuracy时输出format语句

  //Nil测试,XCTAssert[Not]Nil断言判断给定的表达式值是否为nil
  XCTAssertNil(expression, format...)
  XCTAssertNotNil(expression, format...)

  //失败断言     
  XCTFail(format...)


//Exception Tests
  XCTAssertThrows(expression, format...)
  XCTAssertThrowsSpecific(expression, exception_class, format...)
  XCTAssertThrowsSpecificNamed(expression, exception_class, exception_name, format...)
  XCTAssertNoThrow(expression, format...)
  XCTAssertNoThrowSpecific(expression, exception_class, format...)
  XCTAssertNoThrowSpecificNamed(expression, exception_class, exception_name, format...)