iOS进行单元测试OCUnit+xctool
单元测试
什么是单元测试
简单说来就是为你的方法多专门写一个测试函数。以保证你的方法在不停的修改开发中。保持正确。如果出错,第一时间让你知道,这样从最小单位开始监控来保证软件的质量。
我为什么要单元测试
其实要开始写单元测试的原因是,由于我的原因格志的存储逻辑一直有问题。 一个是代码写的比较搓,一个是修改存储的逻辑的话。影响面比较大。可能修复了一个bug而引入了未知的多个bug。为了Sumi早日达到国际化大厂的标准。决定上单元测试于格志。其实最根本的目的还是想要项目变的更加可靠。
单元测试的一般方法
关于测试的书,一搜就一大把。都有高深的理论和方法来指导怎么写单元测试的方法。我觉得嘛不用搞了这么复杂。 无非就3种时候会去想写测试:
- 代码完成以后
- 开始写代码之前
- 修复了一个bug以后
第一种是完成了代码,恩我要测试一下我写的这些方法可靠不可靠。那这时候可以写测试。
第二种一个著名的方法论TDD。主要思想就是在写代码之前,就全部设计好借口。函数名字什么的。然后在写能通过测试的函数。
第三种就是发现了bug,我修复了这个bug。为了确保修复是成功的。那就写个测试吧。
我觉得啊,着三种都没有什么好或差。能写测试的少年都是好少年。何必这么在意什么时候去写呢。
一个完整的测试类组成像下图
在一开始可能测试方法里面需要一些上下文环境。这些可以在Setup里面去完成。然后才可是执行自己写的测试方法。 然后测试结束以后,可能产生了一些垃圾数据文件什么的。这时候你可以在TearDown方法里面把他们处理掉。
以上大部分都是我自己的粗浅理解,如果你需要更多关于单元测试请阅读更加系统专业的书籍。
OCUnit
OCUnit是xCode里面自己带的单元测试框架。不必安装第三方的其他库就可以使用。最简单的就是创建项目的时候你把单元测试的那个勾点上。xCode就会自动的为你加入一个单元测试的target。快捷键Command + U。就可以运行测试。最喜欢这样方便又好用的东西了。当然运行OCUnit的测试输出的内容实在惨不忍睹。
创建一个OCUnit的Unit Test
新项目使用OCUnit
选上Unit Test
会自动的建立一个Target
自动的为你添加好需要的类库
为你添加一个Unit Test的类
看一眼Scheme 只有一个。
看看Scheme里面是怎么写的。
用Command + U运行一下测试看看结果。这是没有通过的。因为自动生成的模板就是不通过的。具体一会儿分析代码。
看看终端的输出。渣一般的难看。根本无法高识别度的分清。
已经存在的项目使用OCUnit
这是一个一开始没有选择过Unit Test的项目
点击增加Target
选择Unit testing Bundle
为我们的测试bundle取一个名字
我们可以看到Scehme多出来了一个。这时候如果选择的是App的Scehme。Command + U。是没有运行测试的。要选择我们新建立的Test Scehme。再按Command + U.就运行了测试了。
如何为App的Scehme添加Test。使得不用切换Scehme,就可以运行Unit Test。
然后选择你建立的Unit Test bundle。 打完收工。
OCUnit使用的宏
STAssertEqualObjects(a1, a2, description, …)
STAssertEquals(a1, a2, description, …)
STAssertEqualsWithAccuracy(a1, a2, accuracy,description, …)
STFail(description, …)
STAssertNil(a1, description, …)
STAssertNotNil(a1, description, …)
STAssertTrue(expr, description, …)
STAssertTrueNoThrow(expr, description, …)
STAssertFalse(expr, description, …)
STAssertFalseNoThrow(expr, description, …)
STAssertThrows(expr, description, …)
STAssertThrowsSpecific(expr, specificException, description, …)
STAssertThrowsSpecificNamed(expr, specificException, aName, description, …)
STAssertNoThrow(expr, description, …)
STAssertNoThrowSpecific(expr, specificException, description, …)
STAssertNoThrowSpecificNamed(expr, specificException, aName, description, …)
比较经常使用的宏
STAssertTrue(expr, description, …)
STAssertFalse(expr, description, …)
STAssertNil(a1, description, …)
STAssertNotNil(a1, description, …)
STAssertEqualObjects(a1, a2, description, …)
STAssertEquals(a1, a2, description, …)
STFail(description, …)
STAssertThrows(expr, description, …)
写了几个测试方法的例子
1 |
- (void)testOne { |
一会儿用xctool跑个华丽丽的出来看。
xctool
xctool是什么
xctool是Facebook开源的一个命令行工具,用来替代苹果的xcodebuild工具。
官方演示
你可以用它来Build你的App。跑Tests。而且它跑Test输出是华丽丽的彩色。比xCode自带的不知好看多少倍。OCUnit本来被吐槽无数,遇上了xctool以后就逆袭了啊。
世界上最最牛的SNS出品,肯定不会坑爹啊。
安装xctool
最方便 最推荐的是用Homebrew。如果你的Mac里面没有安装Homebrew我觉得是你的损失。
1 |
brew update |
使用xctool来跑OCUnit测试
关于如何使用xctool,你去看官方文档肯定要比我结束好的多。 我就是过来跑测试的例子给你看而已。
测试一
1 |
xctool -project HelloOCUnit.xcodeproj -scheme HelloOCUnit test |
测试二
1 |
xctool -project HelloAfterAddOCUnit.xcodeproj -scheme HelloAfterAddOCUnit test xctool -project HelloAfterAddOCUnit.xcodeproj -scheme HelloAfterAddOCUnitUnitTest test |
总结
以上就是OCUnit的使用建议。建议OCunit+xctool。来进行你的单元测试构建。更多信息请阅读相关资料。我这里只是写了入门而已。接下来的测试之路就靠你了。
转载自:http://iiiyu.com/2013/05/23/learning-ios-notes-twenty-three/
iOS进行单元测试OCUnit+xctool的更多相关文章
- 【iOS】单元测试
iOS单元测试(作用及入门提升) 字数1704 阅读16369 评论26 喜欢247 由于只是一些简单实用的东西,学学还是挺不错的.其实单元测试用的好,开发起来也会快很多.单元测试对于我目前来说,就是 ...
- ios专题 - OCUnit
OCUnit是集成在Xcode开发环境的单元测试框架:OCUnit运行必须包含SenTestingKit.framework这个库: 针对需要测试的类,每个类写出自己的TestCase,独立组织一个文 ...
- iOS 开发-单元测试
前言 维基百科对单元测试的定义如下: 在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可 ...
- iOS基础 - 单元测试
单元测试(unit testing):对软件中最小可测试单元进行检查和验证.一般面向过程的语言中,基本单元为函数,面向对象的语言中,基本单元通常是类,其实对于一个手机上的app来说基本单元也可以是一个 ...
- iOS - UnitTests 单元测试
1.UnitTests 在计算机编程中,单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部件.在过程化编 ...
- iOS 初步单元测试
- (void)testExample { // This is an example of a functional test case. // Use XCTAssert and related ...
- ios shell打包脚本 xctool
#! /bin/bash project_path=$() project_config=Release output_path=~/Desktop build_scheme=YKTicketsApp ...
- Xcode 5 单元测试(二)OCMock和GHUnit
在Xcode 5 单元测试(一)使用XCTest进行单元测试中说了如何在Xcode 5中使用XCTest进行简单的单元测试,本文就来探讨下mock测试和更高级的工具GHUnit. Mock 首先科普下 ...
- iOS开发之单元测试
开始之前 本文侧重讲述如何在iOS程序的开发过程中使用单元测试.使用Xcode自带的OCUnit作为测试框架. 一.单元测试概述 单元测试作为敏捷开发实践的组成之一,其目的是提高软件开发的效率,维持代 ...
随机推荐
- 43、gridview或者listview的adapter优化
1.在getview时,如果是一个textview,那么不用每次都new一个或者inflater直接返回,可以先判断convertview是否为空,如果为空则new或者inflate,否则直接返回co ...
- leetcode 【 Sort Colors 】python 实现
题目: Given an array with n objects colored red, white or blue, sort them so that objects of the same ...
- UNIX 系统中 wc 程序的主要部分
以下代码为 UNIX 系统中 wc 程序的骨干部分 #include <stdio.h> #define IN 1 #define OUT 0 int main(int argc, cha ...
- Windows网络编程笔记3 ---- 邮槽和命名管道
邮槽和命名管道的使用方法也很简单,只需几个有限的函数就可以实现双方的通信. 第三.邮槽 邮槽----进程间通信机制. 通过邮槽客户进程可以将消息通过广播给一个或多个服务进程.这是一个单向通信机制,缺点 ...
- 设置CMD默认代码页为65001或936
之前不知道怎么改的,CMD的代码页被默认设置成了65001 但我右击CMD标题,选择‘默认值’,显示默认却是936,但为何每次打开都是65001呢 上网找到设置默认值的方法 1 win键+R打 ...
- PageObject模式简介
一.原理 将页面元素定位和对元素的操作行为封装成一个page类,实现对页面对象和测试用例的分离. 一条测试用例可能需要多个步骤操作元素,将每个步骤单独的封装成一个方法,在执行测试用例的时候调用封装好的 ...
- Python 模块搜索路径
Python 会在什么地方寻找文件来导入模块? 使用命名为 path 变量的存储在标准 sys 模块 下的一系列目录名和 ZIP 压缩文件. 你可以读取和修改这个列表.下面是在我的 Mac 上 Pyt ...
- PYTHON资源入口汇总
Python资源入口汇总 官网 官方文档 教程和书籍 框架 数据库 模板 工具及第三方包 视频 书籍 博客 经典博文集合 社区 其他 整理中,进度30% 官网 入口 官方文档 英文 document ...
- php+mysqli预处理技术实现添加、修改及删除多条数据的方法
本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户 ...
- CLion 使用笔记
我并不会写 CMakeFiles . 我要对拍,所以需要按下 Ctrl + F9 后同时编译 main.cpp 和 ref.cpp 两个文件,并生成 main.exe 和 ref.exe 以备进一步处 ...