使用OCUnit写单元测试---逻辑测试
2013-12-20 14:24
459 查看
(转自:http://blog.csdn.net/tonny_guan/article/details/8524279)
首先讲一下逻辑测试和应用测试的概念,应用测试是对整个应用程序进行的测试,设计测试用例时候要考虑到运行环境等因素,例如在测试JavaEE时候需要考虑Web容器和EJB容器等环境问题。而逻辑测试则是轻量级的,只测试某个业务逻辑对象的方法或算法正确性。
编写OCUnit测试方法
每一个单元测试用例对应于测试类中的一个方法,因此测试类分为:逻辑测试类和应用测试类,在设计测试用例时候,逻辑测试和应用测试也是不同的。编写OCUnit测试方法也是要分逻辑测试和应用测试。下面我们还是通过计算个人所得税应用介绍,它们的编写过程,被测试类ViewController编写过程不再介绍。
1、逻辑测试方法
逻辑测试应该测试计算个人所得税的业务逻辑,即测试ViewController类中的calculate:方法
LogicTest.h的代码如下:
[cpp] view
plaincopy
#import <SenTestingKit/SenTestingKit.h>
#import “ViewController.h”
@interface LogicTest : SenTestCase
@property (nonatomic,strong) ViewController *viewController;
@end
在h文件中定义viewController属性,注意定义为属性参数设置为strong。LogicTest.m的代码如下:
#import “LogicTest.h”
@implementation LogicTest
- (void)setUp
{
[super setUp];
self.viewController = [[ViewController alloc] init];
}
- (void)tearDown
{
self.viewController = nil;
[super tearDown];
}
//测试月应纳税额不超过1500元 用例1
- (void)testCalculateLevel1
{
double dbRevenue = 5000;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 45, @”期望值是:45 实际值是:%@”, strTax);
}
//测试月应纳税额超过1500元至4500元 用例2
- (void)testCalculateLevel2
{
double dbRevenue = 8000;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 345, @”期望值是:345 实际值是:%@”, strTax);
}
//测试月应纳税额超过4500元至9000元 用例3
- (void)testCalculateLevel3
{
double dbRevenue = 12500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 1245, @”期望值是:1245 实际值是:%@”, strTax);
}
//测试月应纳税额超过9000元至35000元 用例4
- (void)testCalculateLevel4
{
double dbRevenue = 38500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 7745, @”期望值是:7745 实际值是:%@”, strTax);
}
//测试月应纳税额超过35000元至55000元 用例5
- (void)testCalculateLevel5
{
double dbRevenue = 58500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 13745, @”期望值是:13745 实际值是:%@”, strTax);
}
//测试月应纳税额超过55000元至80000元 用例6
- (void)testCalculateLevel6
{
double dbRevenue = 83500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 22495, @”期望值是:22495 实际值是:%@”, strTax);
}
//测试月应纳税额超过80000元 用例7
- (void)testCalculateLevel7
{
double dbRevenue = 103500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 31495, @”期望值是:31495 实际值是:%@”, strTax);
}
@end
在setUp方法中初始化viewController,在tearDown方法中释放viewController属性。测试方法testCalculateLevel1~ testCalculateLevel7是对应测试用例1~7,测试方法中STAssertTrue是OCUnit框架宏断言,这些与断言有关的宏。
OCUnit框架断言宏
首先讲一下逻辑测试和应用测试的概念,应用测试是对整个应用程序进行的测试,设计测试用例时候要考虑到运行环境等因素,例如在测试JavaEE时候需要考虑Web容器和EJB容器等环境问题。而逻辑测试则是轻量级的,只测试某个业务逻辑对象的方法或算法正确性。
编写OCUnit测试方法
每一个单元测试用例对应于测试类中的一个方法,因此测试类分为:逻辑测试类和应用测试类,在设计测试用例时候,逻辑测试和应用测试也是不同的。编写OCUnit测试方法也是要分逻辑测试和应用测试。下面我们还是通过计算个人所得税应用介绍,它们的编写过程,被测试类ViewController编写过程不再介绍。
1、逻辑测试方法
逻辑测试应该测试计算个人所得税的业务逻辑,即测试ViewController类中的calculate:方法
LogicTest.h的代码如下:
[cpp] view
plaincopy
#import <SenTestingKit/SenTestingKit.h>
#import “ViewController.h”
@interface LogicTest : SenTestCase
@property (nonatomic,strong) ViewController *viewController;
@end
在h文件中定义viewController属性,注意定义为属性参数设置为strong。LogicTest.m的代码如下:
#import “LogicTest.h”
@implementation LogicTest
- (void)setUp
{
[super setUp];
self.viewController = [[ViewController alloc] init];
}
- (void)tearDown
{
self.viewController = nil;
[super tearDown];
}
//测试月应纳税额不超过1500元 用例1
- (void)testCalculateLevel1
{
double dbRevenue = 5000;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 45, @”期望值是:45 实际值是:%@”, strTax);
}
//测试月应纳税额超过1500元至4500元 用例2
- (void)testCalculateLevel2
{
double dbRevenue = 8000;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 345, @”期望值是:345 实际值是:%@”, strTax);
}
//测试月应纳税额超过4500元至9000元 用例3
- (void)testCalculateLevel3
{
double dbRevenue = 12500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 1245, @”期望值是:1245 实际值是:%@”, strTax);
}
//测试月应纳税额超过9000元至35000元 用例4
- (void)testCalculateLevel4
{
double dbRevenue = 38500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 7745, @”期望值是:7745 实际值是:%@”, strTax);
}
//测试月应纳税额超过35000元至55000元 用例5
- (void)testCalculateLevel5
{
double dbRevenue = 58500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 13745, @”期望值是:13745 实际值是:%@”, strTax);
}
//测试月应纳税额超过55000元至80000元 用例6
- (void)testCalculateLevel6
{
double dbRevenue = 83500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 22495, @”期望值是:22495 实际值是:%@”, strTax);
}
//测试月应纳税额超过80000元 用例7
- (void)testCalculateLevel7
{
double dbRevenue = 103500;
NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
NSString* strTax =[self.viewController calculate:strRevenue];
STAssertTrue([strTax doubleValue] == 31495, @”期望值是:31495 实际值是:%@”, strTax);
}
@end
在setUp方法中初始化viewController,在tearDown方法中释放viewController属性。测试方法testCalculateLevel1~ testCalculateLevel7是对应测试用例1~7,测试方法中STAssertTrue是OCUnit框架宏断言,这些与断言有关的宏。
OCUnit框架断言宏
框架 | 说明 |
STAssertEqualObjects | 当两个对象不相等,或者是其中一个对象为nil时候断言失败; |
STAssertEquals | 当参数1不等于参数2时候断言失败,用于C中基本数据测试; |
STAssertNil | 当参数不是nil时候断言失败; |
STAssertNotNil | 当参数是nil时候断言失败; |
STAssertTrue | 当表达式为false时候断言失败; |
STAssertFalse | 当表达式为ture时候断言失败; |
STAssertThrows | 如果表达式没有抛出异常,则断言失败; |
STAssertNoThrow | 如果表达式抛出异常,则断言失败; |
相关文章推荐
- iOS开发那些事--编写OCUnit测试方法-逻辑测试方法
- 编写OCUnit测试方法-逻辑测试方法
- iOS开发那些事--编写OCUnit测试方法-逻辑测试方法
- iOS开发中使用OCUnit进行单元测试
- XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit。通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能。本文将演示如何在
- iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)
- iOS开发那些事--编写OCUnit测试方法-逻辑测试方法
- iOS开发那些事--编写OCUnit测试方法-逻辑测试方法
- Python单元测试框架使用unittestpyUnit
- 如何使用单元测试 测试WEB组件方法中的含有Session、Cookie等HttpContext功能调用的方法? 转
- 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码
- [C#]_[使用NUnit对业务逻辑代码进行单元测试]
- shell编程之条件测试表达,命令间的逻辑关系式和控制结构的使用以及算术运算
- 【开发】测试驱动的FLEX开发--使用FLEXUNIT
- 在 unittest 中使用 logging 模块记录测试数据
- 在HADOOP中使用MRUNIT进行单元测试
- Python单元测试:unittest使用简介
- Python之自动单元测试之一(unittest使用实例)
- 在Hadoop中使用MRUnit进行单元测试
- PHP单元测试之PHP测试、PHPUnit的使用、在ThinkPHP中使用PHPUnit