iOS开发那些事--编写OCUnit测试方法-应用测试方法

应用测试方法

应用测试是测试应用程序的一些功能,这个功能具体到点击一个按钮触发一个事件,因此它主要是测试表示层。我们看看视图控制器ViewController.m中有那些方法需要测试,然后再来设计测试用例。

@implementation ViewController

- (void)viewDidLoad

{

[super viewDidLoad];

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

}

- (IBAction)onClick:(id)sender {

//关闭键盘

[self.txtRevenue resignFirstResponder];

self.lblTax.text =[self calculate:self.txtRevenue.text];

}

//计算个人所得税

-(NSString*) calculate:(NSString*)revenue {

… …

}

@end

viewDidLoad和didReceiveMemoryWarning是否需要测试,要看我们是否这个方法中有一些自己编写的代码,就目前而言我们不需要测试它们。onClick:是响应用户点击计算按钮的方法,它需要测试。calculate:方法是业务逻辑方法,我们在逻辑测试中测试过了,是否需要再测试呢?一般情况下应该只在逻辑测试就可以了,但是如果该方法需要外部环境(依赖其它类或需要特殊运行环境等),逻辑测试无法提供则需要应用测试,这是应用测试能够在设备上运行,它能够提供一个实际的、真实的测试环境。

下面我们实现onClick:方法的应用测试,我们要模拟点击按钮事件处理,它的输入条件通过文本框控件输入的,输出结果是通过标签控件展示的。设计测试用例选取常见值和边界值作为输入值,文本框的键盘限制为数字键盘。

输入验证不需要考虑太多,只需要考虑空情况,我们设计了6个用例。

onClick:方法应用测试用例


测试用例


输入条件

月收入总额(元)


输出结果

月应纳个人所得税税额(元)


说明


1

空白 0.00 测试不输入直接点击计算按钮

2

8000 345.00 测试整数

3

8000.59 345.12 测试小数

4

08000.59 345.12 测试有前导0数据

5

40000.50.56 8195.15 测试输入两个小数点

6

40000.50..56 8195.15 测试连在一起两个小数点

我们看看应用测试类AppllicationTest.h代码:

#import <SenTestingKit/SenTestingKit.h>

#import “AppDelegate.h”

#import “ViewController.h”

@interface AppllicationTest : SenTestCase

@property (nonatomic, strong) ViewController *viewController;

@end

应用测试类AppllicationTest.m中的setUp和tearDown方法代码:

- (void)setUp

{

[super setUp];

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

UIWindow *window = [appDelegate window];

UINavigationController *navController = (UINavigationController*)window.rootViewController;

self.viewController  = (ViewController*)navController.topViewController;

}

- (void)tearDown

{

self.viewController = nil;

[super tearDown];

}

我们在setUp方法中需要初始化viewController属性,viewController代表的是一个视图控制器,它是iOS系统通过故事板文件创建,而不能简单的通过下面的语句实例化:

self.viewController  = [[ViewController alloc] init];

我们可以通过应用程序委托对象AppDelegate获得window对象,每个window对象可以使用属性rootViewController取得它的一个根视图控制器,本例中的根视图控制器是UINavigationController,而不是ViewController,所以我们还需要使用UINavigationController的topViewController属性取得ViewController对象。

应用测试类AppllicationTest.m中的测试方法代码:

//测试不输入直接点击计算按钮

- (void)testOnClickInputBlank

{

STAssertNotNil(self.viewController, @”ViewController没有赋值。”);

//设定输入值

self.viewController.txtRevenue.text = @”";

//调用oncClick测试

[self.viewController onClick:nil];

//取得输出结果

NSString* strTax = self.viewController.lblTax.text;

//断言

STAssertEqualObjects(strTax, @”0.00″, @”期望值是:0.00 实际值是:%@”, strTax);

}

//测试整数

- (void)testOnClickInputIntegerNumber

{

STAssertNotNil(self.viewController, @”ViewController没有赋值。”);

//设定输入值

self.viewController.txtRevenue.text = @”8000″;

//调用oncClick测试

[self.viewController onClick:nil];

//取得输出结果

NSString* strTax = self.viewController.lblTax.text;

//断言

STAssertEqualObjects(strTax, @”345.00″, @”期望值是:345.00 实际值是:%@”, strTax);

}

//测试小数

- (void)testOnClickInputOneDot

{

STAssertNotNil(self.viewController, @”ViewController没有赋值。”);

//设定输入值

self.viewController.txtRevenue.text = @”8000.59″;

//调用oncClick测试

[self.viewController onClick:nil];

//取得输出结果

NSString* strTax = self.viewController.lblTax.text;

//断言

STAssertEqualObjects(strTax, @”345.12″, @”期望值是:345.12 实际值是:%@”, strTax);

}

//测试输入两个小数点

- (void)testOnClickInputTwoDot

{

STAssertNotNil(self.viewController, @”ViewController没有赋值。”);

//设定输入值

self.viewController.txtRevenue.text = @”40000.50.56″;

//调用oncClick测试

[self.viewController onClick:nil];

//取得输出结果

NSString* strTax = self.viewController.lblTax.text;

//断言

STAssertEqualObjects(strTax, @”8195.15″, @”期望值是:8195.15 实际值是:%@”, strTax);

}

//测试有前导0数据

- (void)testOnClickInputPrefixZero

{

STAssertNotNil(self.viewController, @”ViewController没有赋值。”);

//设定输入值

self.viewController.txtRevenue.text = @”08000.59″;

//调用oncClick测试

[self.viewController onClick:nil];

//取得输出结果

NSString* strTax = self.viewController.lblTax.text;

//断言

STAssertEqualObjects(strTax, @”345.12″, @”期望值是:345.12 实际值是:%@”, strTax);

}

//测试连在一起两个小数点

- (void)testOnClickInputLinkDot

{

STAssertNotNil(self.viewController, @”ViewController没有赋值。”);

//设定输入值

self.viewController.txtRevenue.text = @”40000.50..56″;

//调用oncClick测试

[self.viewController onClick:nil];

//取得输出结果

NSString* strTax = self.viewController.lblTax.text;

//断言

STAssertEqualObjects(strTax, @”8195.15″, @”期望值是:8195.15 实际值是:%@”, strTax);

}

这些测试方法都是非常类似的,首先需要使用STAssertNotNil宏判断一下self.viewController是否为nil,然后self.viewController.txtRevenue.text设置文本框值,真正运行的时候我们是通过文本框控件输入的。语句[self.viewController onClick:nil]是测试核心目的,参数是按钮对象指针onClick:中没有使用,传递nil就可以了。输出结果的取得是从lblTax标签控件中取得的。最后使用STAssertEqualObjects宏断言。

时间: 2024-09-20 10:33:58

iOS开发那些事--编写OCUnit测试方法-应用测试方法的相关文章

iOS开发那些事--编写OCUnit测试方法-逻辑测试方法

应用测试和逻辑测试 添加OCUnit到工程时候,我们提到过,应用测试(Application Testing)和逻辑测试(Logic Testing)两个概念,它们并非是OCUnit中的概念,而是单元测试中概念.应用测试是对整个应用程序进行的测试,设计测试用例时候要考虑到运行环境等因素,例如在测试JavaEE时候需要考虑Web容器和EJB容器等环境问题.而逻辑测试则是轻量级的,只测试某个业务逻辑对象的方法或算法正确性. 编写OCUnit测试方法 每一个单元测试用例对应于测试类中的一个方法,因此测

iOS开发入门:编写OCUnit测试方法-应用测试方法

应用测试方法 应用测试是测试应用程序的一些功能,这个功能具体到点击一个按钮触发一个事件,因此它主要是测试表示层.我们看看视图控制器ViewController.m中有那些方法需要测试,然后再来设计测试用例. @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } -

iOS开发入门:编写OCUnit测试方法-逻辑测试方法

应用测试和逻辑测试 添加OCUnit到工程时候,我们提到过,应用测试(Application Testing)和逻辑测试(Logic  Testing)两个概念,它们并非是OCUnit中的概念,而是单元测试中概念.应用测试是对整个应用程序进行的测试,设计测试用例时候要考虑到运行环 境等因素,例如在测试JavaEE时候需要考虑Web容器和EJB容器等环境问题.而逻辑测试则是轻量级的,只测试某个业务逻辑对象的方法或算法正确性. 编写OCUnit测试方法 每一个单元测试用例对应于测试类中的一个方法,因

iOS开发那些事-iOS网络编程同步GET方法请求编程

iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法.我们先了解其中最为简单的同步GET方法请求. 为了学习这些API的使用MyNotes"备忘录"应用实例,数据来源于服务器端,而不是本地的Notes.xml(或Notes.json)文件. 首先实现查询业务,查询业务请求可以在主视图控制器MasterViewController类中实现,其中MasterViewController.h代码如下: #import <UIKit/U

iOS开发那些事--OCUnit测试框架

使用OCUnit测试框架iOS单元测试框架 原则上,是否使用测试框架都不会影响单元测试结果,但是"工欲善其事,必先利其器"使用单元测试框架更便于我们测试和分析结果. 主要的iOS单元测试框架有: OCUnit,是开源测试框架,与Xcode工具集成在一起使用非常方便,测试报告以文本形式输出到输出窗口: GHUnit,是开源测试框架,它可以将测试报告以应用形式可视化输出到设备或模拟器上,也可以以文本形式输出到输出窗口:GHUnit可以测试OCUnit编写的测试用例: OCMock,是开源测

iOS开发那些事--简单表视图

表视图是iOS开发中使用最频繁的视图,我们一般都会选择以表的形式来展现数据,比如通讯录.频道列表等.表视图分段.分组.索引等功能使我们所展示的数据看起来更规整更有调理,更令人兴奋的是表视图还可以利用细节展示等功能多层次的展示数据,正所谓一表胜千言. 不过,相较于其它控件表视图的使用比较复杂,但是对比于表视图各种灵活多变的功能,我们在使用上花费的努力还是相当值得的. 简单表视图 表视图的形式灵活多变,本着由浅入深的原则,我们先从简单表视图开始学习.本节讲的简单表视图是动态表,(iOS 5之前全部是

iOS开发那些事-如何编译iOS程序

我们从编写到发布应用会经历3个阶段:模拟器上运行调试.设备上运行调试和发布编译,苹果为了防止非法设备和非开发人员调试和发布应用,使用配置概要文件(Provisioning Profiles)控制在设备上运行调试和发布编译阶段,配置概要文件分为两种:开发配置概要文件和发布配置概要文件 1.创建发布配置概要文件 创建过程是先登录iOS开发中心的配置门户网站(iOS Provisioning Portal),通过左边的导航菜单Provisioning进入.选择Distribution标签就是管理发布配

iOS开发那些事-iOS常用设计模式–委托模式

对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析.当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式.委托模式.观察者模式.MVC模式. 委托模式 委托模式从GoF 设计装饰(Decorator).适配器(Adapter)和模板方法(Template Method)等模式演变而来.几乎每一个应用都会或多或少地使用到委托模式.不只是CocoaTouch框架,在Cocoa框架中委托模式也得到了广泛的应用. 问题提出 对于应用生命周期的非运行状态--应用启

iOS开发那些事-移动平台架构设计

低耦合企业级系统架构设计 我们往往称JavaEE或.Net 开发的产品为"系统",而移动平台(主要是:Android.iOS和Window Phone)开发的产品为"应用"."系统"比较复杂,需要架构设计,而"应用"相对比较简单,这是不是意味着我们不需要考虑架构问题呢?   我们首先了解一下企业级系统架构设计.软件设计的原则是提高软件系统的"可复用性"和"可扩展性",系统架构设计采用层次