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

应用测试方法

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

      
      
      
      
  1. @implementation ViewController 
  2.  
  3. - (void)viewDidLoad 
  4.  
  5.  
  6. [super viewDidLoad]; 
  7.  
  8.  
  9. - (void)didReceiveMemoryWarning 
  10.  
  11.  
  12. [super didReceiveMemoryWarning]; 
  13.  
  14.  
  15. - (IBAction)onClick:(id)sender { 
  16.  
  17. //关闭键盘 
  18.  
  19. [self.txtRevenue resignFirstResponder]; 
  20.  
  21. self.lblTax.text =[self calculate:self.txtRevenue.text]; 
  22.  
  23.  
  24. //计算个人所得税 
  25.  
  26. -(NSString*) calculate:(NSString*)revenue { 
  27.  
  28. … … 
  29.  
  30.  
  31. @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代码:

 

   
   
   
   
  1. @implementation ViewController 
  2.  
  3. - (void)viewDidLoad 
  4.  
  5.  
  6. [super viewDidLoad]; 
  7.  
  8.  
  9. - (void)didReceiveMemoryWarning 
  10.  
  11.  
  12. [super didReceiveMemoryWarning]; 
  13.  
  14.  
  15. - (IBAction)onClick:(id)sender { 
  16.  
  17. //关闭键盘 
  18.  
  19. [self.txtRevenue resignFirstResponder]; 
  20.  
  21. self.lblTax.text =[self calculate:self.txtRevenue.text]; 
  22.  
  23.  
  24. //计算个人所得税 
  25.  
  26. -(NSString*) calculate:(NSString*)revenue { 
  27.  
  28. … … 
  29.  
  30.  
  31. @end 

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

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

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

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

 

   
   
   
   
  1. #import <SenTestingKit/SenTestingKit.h> 
  2.  
  3. #import “AppDelegate.h” 
  4.  
  5. #import “ViewController.h” 
  6.  
  7. @interface AppllicationTest : SenTestCase 
  8.  
  9. @property (nonatomic, strong) ViewController *viewController; 
  10.  
  11.   
  12.  
  13. @end 
  14.  
  15. 应用测试类AppllicationTest.m中的setUp和tearDown方法代码: 
  16.  
  17. - (void)setUp 
  18.  
  19.  
  20. [super setUp]; 
  21.  
  22. AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
  23.  
  24. UIWindow *window = [appDelegate window]; 
  25.  
  26. UINavigationController *navController = (UINavigationController*)window.rootViewController; 
  27.  
  28. self.viewController  = (ViewController*)navController.topViewController; 
  29.  
  30.  
  31. - (void)tearDown 
  32.  
  33.  
  34. self.viewController = nil; 
  35.  
  36. [super tearDown]; 
  37.  
  38.  
  39. 我们在setUp方法中需要初始化viewController属性,viewController代表的是一个视图控制器,它是iOS系统通过故事板文件创建,而不能简单的通过下面的语句实例化: 
  40.  
  41. self.viewController  = [[ViewController alloc] init]; 
  42.  
  43. 我们可以通过应用程序委托对象AppDelegate获得window对象,每个window对象可以使用属性rootViewController取得它的一个根视图控制器,本例中的根视图控制器是UINavigationController,而不是ViewController,所以我们还需要使用UINavigationController的topViewController属性取得ViewController对象。 
  44.  
  45. 应用测试类AppllicationTest.m中的测试方法代码: 
  46.  
  47. //测试不输入直接点击计算按钮 
  48.  
  49. - (void)testOnClickInputBlank 
  50.  
  51.  
  52. STAssertNotNil(self.viewController, @”ViewController没有赋值。”); 
  53.  
  54. //设定输入值 
  55.  
  56. self.viewController.txtRevenue.text = @”"; 
  57.  
  58. //调用oncClick测试 
  59.  
  60. [self.viewController onClick:nil]; 
  61.  
  62. //取得输出结果 
  63.  
  64. NSString* strTax = self.viewController.lblTax.text; 
  65.  
  66. //断言 
  67.  
  68. STAssertEqualObjects(strTax, @”0.00″, @”期望值是:0.00 实际值是:%@”, strTax); 
  69.  
  70.  
  71. //测试整数 
  72.  
  73. - (void)testOnClickInputIntegerNumber 
  74.  
  75.  
  76. STAssertNotNil(self.viewController, @”ViewController没有赋值。”); 
  77.  
  78. //设定输入值 
  79.  
  80. self.viewController.txtRevenue.text = @”8000″; 
  81.  
  82. //调用oncClick测试 
  83.  
  84. [self.viewController onClick:nil]; 
  85.  
  86. //取得输出结果 
  87.  
  88. NSString* strTax = self.viewController.lblTax.text; 
  89.  
  90. //断言 
  91.  
  92. STAssertEqualObjects(strTax, @”345.00″, @”期望值是:345.00 实际值是:%@”, strTax); 
  93.  
  94.  
  95. //测试小数 
  96.  
  97. - (void)testOnClickInputOneDot 
  98.  
  99.  
  100. STAssertNotNil(self.viewController, @”ViewController没有赋值。”); 
  101.  
  102. //设定输入值 
  103.  
  104. self.viewController.txtRevenue.text = @”8000.59″; 
  105.  
  106. //调用oncClick测试 
  107.  
  108. [self.viewController onClick:nil]; 
  109.  
  110. //取得输出结果 
  111.  
  112. NSString* strTax = self.viewController.lblTax.text; 
  113.  
  114. //断言 
  115.  
  116. STAssertEqualObjects(strTax, @”345.12″, @”期望值是:345.12 实际值是:%@”, strTax); 
  117.  
  118.  
  119. //测试输入两个小数点 
  120.  
  121. - (void)testOnClickInputTwoDot 
  122.  
  123.  
  124. STAssertNotNil(self.viewController, @”ViewController没有赋值。”); 
  125.  
  126. //设定输入值 
  127.  
  128. self.viewController.txtRevenue.text = @”40000.50.56″; 
  129.  
  130. //调用oncClick测试 
  131.  
  132. [self.viewController onClick:nil]; 
  133.  
  134. //取得输出结果 
  135.  
  136. NSString* strTax = self.viewController.lblTax.text; 
  137.  
  138. //断言 
  139.  
  140. STAssertEqualObjects(strTax, @”8195.15″, @”期望值是:8195.15 实际值是:%@”, strTax); 
  141.  
  142.  
  143. //测试有前导0数据 
  144.  
  145. - (void)testOnClickInputPrefixZero 
  146.  
  147.  
  148. STAssertNotNil(self.viewController, @”ViewController没有赋值。”); 
  149.  
  150. //设定输入值 
  151.  
  152. self.viewController.txtRevenue.text = @”08000.59″; 
  153.  
  154. //调用oncClick测试 
  155.  
  156. [self.viewController onClick:nil]; 
  157.  
  158. //取得输出结果 
  159.  
  160. NSString* strTax = self.viewController.lblTax.text; 
  161.  
  162. //断言 
  163.  
  164. STAssertEqualObjects(strTax, @”345.12″, @”期望值是:345.12 实际值是:%@”, strTax); 
  165.  
  166.  
  167. //测试连在一起两个小数点 
  168.  
  169. - (void)testOnClickInputLinkDot 
  170.  
  171.  
  172. STAssertNotNil(self.viewController, @”ViewController没有赋值。”); 
  173.  
  174. //设定输入值 
  175.  
  176. self.viewController.txtRevenue.text = @”40000.50..56″; 
  177.  
  178. //调用oncClick测试 
  179.  
  180. [self.viewController onClick:nil]; 
  181.  
  182. //取得输出结果 
  183.  
  184. NSString* strTax = self.viewController.lblTax.text; 
  185.  
  186. //断言 
  187.  
  188. STAssertEqualObjects(strTax, @”8195.15″, @”期望值是:8195.15 实际值是:%@”, strTax); 
  189.  

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

你可能感兴趣的:(ios开发,IOS测试,OCUnit,iOS测试框架)