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
