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:方法的應用測試,我們要模擬點擊按鈕事件處理,它的輸入條件通過文本框控件輸入的,輸出結果是通過標簽控件展示的。設計測試用例選取常見值和邊界值作為輸入值,文本框的鍵盤限製為數字鍵盤。
輸入驗證不需要考慮太多,隻需要考慮空情況,我們設計了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