閱讀136 返回首頁    go iPhone_iPad_Mac_apple


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宏斷言。


最後更新:2017-04-04 07:03:39

  上一篇:go Core Data淺談係列之八 : 關於並發
  下一篇:go android 關於EditTextPreference光標位置