`

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

1

输入验证不需要考虑太多,只需要考虑空情况,我们设计了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宏断言。

 

分享到:
评论

相关推荐

    OCUnit单元测试学习

    这个项目可能展示了如何创建和运行OCUnit测试,包括如何编写测试类、定义测试方法以及如何组织测试套件。通过分析`CHUnitProject`中的代码,我们可以学习如何有效地利用OCUnit来测试我们的应用程序代码。 在实际...

    基于测试驱动的iOS开发

    特别在iOS开发中,TDD为开发者提供了一种高效、系统的方法,以确保每个组件都能正确无误地执行其预定的功能。为了掌握基于测试驱动的iOS开发,开发人员需要了解相关的工具、测试框架以及测试流程。下面是对所提供...

    图书iOS开发

    - **构建设置**:测试过程中涉及到的各种配置项,包括测试应用程序、测试库等。 - **调试测试**:当测试失败时,需要使用调试工具来定位问题所在。 - **连续集成**:通过自动化的测试流程,确保每次提交代码后都能...

    IOS应用源码之akosma-fontbrowser-1053a20.zip

    Akosma FontBrowser主要使用Objective-C编写,这是iOS开发的传统语言。通过源码,我们可以看到类的定义、协议的使用、消息传递等Objective-C特性。理解类的继承、分类(Category)以及动态性等概念,是解析源码的...

    IOS应用源码之alect-Digital-Egg-Drop-a1b6091.zip

    8. **测试和调试**:XCTest或OCUnit是iOS的单元测试框架,源码中可能包含测试用例,以确保应用功能的正确性。 通过以上分析,我们可以学习到iOS应用的开发流程、设计模式、编程实践,以及如何将物理知识融入到移动...

    Xcode Server 实现 iOS 移动应用的自动化测试与持续集成

    在当今移动应用开发中,自动化测试与持续集成是提高开发效率和保障软件质量的重要手段。Xcode Server作为一个集成于Xcode环境的持续集成工具,非常适合用于iOS应用的自动化测试与持续集成。 首先,要了解自动化测试...

    iphone混合object-C++自动测试框架

    在iOS开发中,C++常用于图形处理、游戏引擎或高性能计算部分。 3. **自动测试框架**:自动测试框架是软件开发过程中的一个重要组成部分,它允许开发者编写可重复执行的测试用例,以确保代码质量并减少回归错误。...

    iOS游戏应用源代码——uffe-iDonkeyDeception-c6fabc7.zip

    XCTest或OCUnit可以用来编写单元测试,验证游戏逻辑的正确性。 9. **Configurations**: 项目可能包含不同的构建配置,如Debug和Release,它们分别对应开发和发布环境,可能有不同的设置如优化级别、符号表等。 10....

    iOS游戏应用源代码——lolohouse-TextStepperField-a98518f.zip

    【iOS游戏应用源代码——lolohouse-TextStepperField-a98518f.zip】这个压缩包文件主要涉及的是iOS开发中的一个特定组件——TextStepperField,这是一个自定义UI控件,用于增强标准的UITextField功能,使得用户可以...

    【Creating New Expressive Social Mediums on the iPhone】[PDF] [iPhone/iPad/iOS]

    在给定的文件信息中,我们探讨了在iPhone上创建新的表达性社交媒介的重要主题,尤其是在iOS应用开发的背景下。虽然标题和描述较为简洁,仅重复了文件名,但通过部分展示的内容,我们可以深入理解其背后的IT知识要点...

    Xcode单元测试(Xcode Unit Testing)

    在iOS和macOS应用开发中,Apple提供了Xcode工具,内置了强大的单元测试框架,如OCUnit,使得开发者可以方便地对应用程序进行测试。以下是对Xcode单元测试的详细讲解。 **1. 单元测试基础** 单元测试是一种软件验证...

    IOS应用源码之【框架】Google Toolbox for Mac.rar

    其次,GTM提供了`GTMUnitTesting`,这是一个测试支持库,它扩展了Xcode自带的OCUnit测试框架,增加了如测试宏、测试计时器等实用功能,让单元测试更加强大且易于编写。这对于确保代码质量、降低维护成本至关重要。 ...

    编写iOS集成测试的框架

    源码Subliminal,Subliminal是一个用以编写iOS集成测试的框架,提供了类似OCUnit/XCTest的接口,所有测试完全使用Objective-C编写。Subliminal为测试提供了直接操控应用的强大机制。 支持使用Xcode 5.1和iOS 7.x ...

    iOS 学习笔记

    Swift的.playground文件是学习和测试代码的理想环境,而Xcode作为官方集成开发环境,提供了编写、调试和构建iOS应用的全部工具。 其次,理解iOS应用的基本架构是关键。UIKit框架是iOS应用的核心,它提供了创建用户...

    CallBlockObjectTest Demo代码

    使用XCTest或OCUnit等测试框架,编写单元测试来检查Block的执行逻辑。 总之,"CallBlockObjectTest" Demo旨在帮助开发者掌握Block在iOS开发中的运用,通过实例展示如何定义、传递和执行Block,以及如何与对象交互、...

    xcode调试包.zip

    3. 单元测试:Xcode支持JUnit和OCUnit测试框架,编写单元测试可以验证代码模块的功能,提高软件质量。 总结,Xcode不仅提供了丰富的调试工具,还支持多种调试方式,使开发者能够高效地解决问题,优化代码。无论你是...

Global site tag (gtag.js) - Google Analytics