应用测试和逻辑测试

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

编写OCUnit测试方法

每一个单元测试用例对应于测试类中的一个方法,因此测试类分为:逻辑测试类和应用测试类,在设计测试用例时候,逻辑测试和应用测试也是不同的。编写 OCUnit测试方法也是要分逻辑测试和应用测试。下面我们还是通过计算个人所得税应用介绍,它们的编写过程,被测试类ViewController编写 过程不再介绍。

1、逻辑测试方法

逻辑测试应该测试计算个人所得税的业务逻辑,即测试ViewController类中的calculate:方法

LogicTest.h的代码如下:

  1. #import <SenTestingKit/SenTestingKit.h>
  2. #import “ViewController.h”
  3. @interface LogicTest : SenTestCase
  4. @property (nonatomic,strong) ViewController *viewController;
  5. @end
  6. 在h文件中定义viewController属性,注意定义为属性参数设置为strong。LogicTest.m的代码如下:
  7. #import “LogicTest.h”
  8. @implementation LogicTest
  9. - (void)setUp
  10. {
  11. [super setUp];
  12. self.viewController = [[ViewController alloc] init];
  13. }
  14. - (void)tearDown
  15. {
  16. self.viewController = nil;
  17. [super tearDown];
  18. }
  19. //测试月应纳税额不超过1500元 用例1
  20. - (void)testCalculateLevel1
  21. {
  22. double dbRevenue = 5000;
  23. NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
  24. NSString* strTax =[self.viewController calculate:strRevenue];
  25. STAssertTrue([strTax doubleValue] == 45, @”期望值是:45 实际值是:%@”, strTax);
  26. }
  27. //测试月应纳税额超过1500元至4500元 用例2
  28. - (void)testCalculateLevel2
  29. {
  30. double dbRevenue = 8000;
  31. NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
  32. NSString* strTax =[self.viewController calculate:strRevenue];
  33. STAssertTrue([strTax doubleValue] == 345, @”期望值是:345 实际值是:%@”, strTax);
  34. }
  35. //测试月应纳税额超过4500元至9000元 用例3
  36. - (void)testCalculateLevel3
  37. {
  38. double dbRevenue = 12500;
  39. NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
  40. NSString* strTax =[self.viewController calculate:strRevenue];
  41. STAssertTrue([strTax doubleValue] == 1245, @”期望值是:1245 实际值是:%@”, strTax);
  42. }
  43. //测试月应纳税额超过9000元至35000元 用例4
  44. - (void)testCalculateLevel4
  45. {
  46. double dbRevenue = 38500;
  47. NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
  48. NSString* strTax =[self.viewController calculate:strRevenue];
  49. STAssertTrue([strTax doubleValue] == 7745, @”期望值是:7745 实际值是:%@”, strTax);
  50. }
  51. //测试月应纳税额超过35000元至55000元 用例5
  52. - (void)testCalculateLevel5
  53. {
  54. double dbRevenue = 58500;
  55. NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
  56. NSString* strTax =[self.viewController calculate:strRevenue];
  57. STAssertTrue([strTax doubleValue] == 13745, @”期望值是:13745 实际值是:%@”, strTax);
  58. }
  59. //测试月应纳税额超过55000元至80000元 用例6
  60. - (void)testCalculateLevel6
  61. {
  62. double dbRevenue = 83500;
  63. NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
  64. NSString* strTax =[self.viewController calculate:strRevenue];
  65. STAssertTrue([strTax doubleValue] == 22495, @”期望值是:22495 实际值是:%@”, strTax);
  66. }
  67. //测试月应纳税额超过80000元 用例7
  68. - (void)testCalculateLevel7
  69. {
  70. double dbRevenue = 103500;
  71. NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];
  72. NSString* strTax =[self.viewController calculate:strRevenue];
  73. STAssertTrue([strTax doubleValue] == 31495, @”期望值是:31495 实际值是:%@”, strTax);
  74. }
  75. @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测试方法-逻辑测试方法相关推荐

  1. iOS开发那些事-Git在Xcode中的配置与使用

    很多Git命令都是在命令行下运行的,命令行下管理Git有很多优点不用多说.但最大的缺点是要求用户记住这些命令.因此Git图形界面还是很受一 些用户欢迎的,其中Xcode作为集成开发环境工具,也提供了一 ...

  2. iOS开发那些事-iOS6苹果地图有用开发

    在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,可是API编程接口没有太大的变化.开发者不须要再学习非常多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也相同适用于iOS5 ...

  3. iOS开发那些事-Passbook详解与开发案例

    Passbook是iOS 6的新功能,只能在iPhone和iPod touch设备中使用.它可以帮助我们管理商家发放的电子会员卡.积分卡. 优惠券等.这将对未来电子商务产生深远的影响.商家通过发放会员 ...

  4. iOS开发那些事-Passbook详解与开发案例(附视频)

    Passbook是iOS 6的新功能,只能在iPhone和iPod touch设备中使用.它可以帮助我们管理商家发放的电子会员卡.积分卡.优惠券等.这将对未来电子商务产生深远的影响.商家通过发放会员卡 ...

  5. iOS开发那些事-iOS6苹果地图实用开发

    在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是API编程接口没有太大的变化.开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也同样适用于iOS5 ...

  6. iOS开发那些事-故事板实现标签导航

    故事板实现标签导航 用故事板技术实现标签导航模式. 使用"Tabbed Application"模版,创建一个名为 "TabNavigationStoryborad&qu ...

  7. iOS开发那些事-平铺导航–基于分屏导航及案例实现

    平铺导航模式是非常重要的导航模式.一般用于简单的扁平化信息浏览或任务.扁平化信息是指这些信息之间没有从属的层次关系,如中国的城市中北京.上 海和哈尔滨之间是扁平化信息,而哈尔滨市与黑龙江省之间的关系是 ...

  8. iOS开发那些事-表视图UI设计模式

    软件设计中有设计模式,在UI设计方面也有设计模式.由于表视图的应用在iOS中极其广泛,本节向大家介绍表视图中两个UI设计模式:分页模式和下拉刷新(Pull-to-Refresh)模式.这两种模式已经成 ...

  9. iOS开发那些事-平铺导航-基于Page的导航及案例实现

    基于分页导航实现 在iOS 5之后,可以使用分页控制器(UIPageViewController)构建类似于电子书效果的应用,我们称为基于分页的应用.一个分页应用有很多相关的视图控制器 分页控制器(P ...

最新文章

  1. Excel对重复数据分组,求出不同的数据(office 2013)
  2. 117.滑动窗口协议
  3. php中rowcount 意思,PHP PDOStatement::rowCount讲解
  4. 12864液晶使用例程
  5. Spring mvc 请求体处理 @RequestBody
  6. 算法 Tricks(五)—— 二进制逻辑运算
  7. python3+selenium获取列表某一列的值
  8. 二分查找的代码实现--go语言
  9. Windows XP优化设置之网络篇
  10. 基于案例学SQL优化-全套视频教程免费下载
  11. wxPython 入门教程.
  12. 一款好看+极简到不行的HTML5音乐播放器-skPlayer
  13. 计算机获取信息的过程是,“获取信息的过程与方法”的教学案例
  14. 3dMax 倒角剖面(中式亭子)
  15. 最全的css中解决外边距合并问题
  16. java map不区分KEY的大小写
  17. 技术实践|Redis基础知识及集群搭建(上)
  18. DVWA-SQL Injection级别通关详解
  19. NanoPC-T4|Android-Q 色温调节
  20. linux软件保护,国产Linux违反《计算机软件保护条例》的说明

热门文章

  1. linux 协议栈 位置,[置顶] Linux协议栈代码阅读笔记(一)
  2. java 读utf-8 xml_〖JAVA经验〗JDom输出UTF-8的XML完美解决方法
  3. python argv,Python argv函数简介
  4. android palette组件用法,Android Support Palette使用详解
  5. java制作文本框中的表格输入List数据
  6. Winform中实现执行cmd命令的工具类
  7. Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
  8. Winform中实现跨窗体获取ZedGraph的ZedGraphControl控件对象
  9. Linux上操作Docker守护态运行
  10. 软考-信息系统项目管理师-组织级项目管理