iOS開發那些事--編寫OCUnit測試方法-邏輯測試方法

智捷關東昇發表於2013-01-23

應用測試和邏輯測試

新增OCUnit到工程時候,我們提到過,應用測試(Application Testing)和邏輯測試(Logic Testing)兩個概念,它們並非是OCUnit中的概念,而是單元測試中概念。應用測試是對整個應用程式進行的測試,設計測試用例時候要考慮到執行環境等因素,例如在測試JavaEE時候需要考慮Web容器和EJB容器等環境問題。而邏輯測試則是輕量級的,只測試某個業務邏輯物件的方法或演算法正確性。

編寫OCUnit測試方法

每一個單元測試用例對應於測試類中的一個方法,因此測試類分為:邏輯測試類和應用測試類,在設計測試用例時候,邏輯測試和應用測試也是不同的。編寫OCUnit測試方法也是要分邏輯測試和應用測試。下面我們還是通過計算個人所得稅應用介紹,它們的編寫過程,被測試類ViewController編寫過程不再介紹。

1、邏輯測試方法

邏輯測試應該測試計算個人所得稅的業務邏輯,即測試ViewController類中的calculate:方法

LogicTest.h的程式碼如下: [cpp] view plaincopy

#import <SenTestingKit/SenTestingKit.h>  

#import “ViewController.h”  

@interface LogicTest : SenTestCase  

@property (nonatomic,strong) ViewController *viewController;  

@end  

在h檔案中定義viewController屬性,注意定義為屬性引數設定為strong。LogicTest.m的程式碼如下:  

#import “LogicTest.h”  

@implementation LogicTest  

- (void)setUp  

{  

[super setUp];  

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

}  

- (void)tearDown  

{  

self.viewController = nil;  

[super tearDown];  

}  

//測試月應納稅額不超過1500元 用例1  

- (void)testCalculateLevel1  

{  

double dbRevenue = 5000;  

NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];  

NSString* strTax =[self.viewController calculate:strRevenue];  

STAssertTrue([strTax doubleValue] == 45, @”期望值是:45 實際值是:%@”, strTax);  

}  

//測試月應納稅額超過1500元至4500元 用例2  

- (void)testCalculateLevel2  

{  

double dbRevenue = 8000;  

NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];  

NSString* strTax =[self.viewController calculate:strRevenue];  

STAssertTrue([strTax doubleValue] == 345, @”期望值是:345 實際值是:%@”, strTax);  

}  

//測試月應納稅額超過4500元至9000元 用例3  

- (void)testCalculateLevel3  

{  

double dbRevenue = 12500;  

NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];  

NSString* strTax =[self.viewController calculate:strRevenue];  

STAssertTrue([strTax doubleValue] == 1245, @”期望值是:1245 實際值是:%@”, strTax);  

}  

//測試月應納稅額超過9000元至35000元 用例4  

- (void)testCalculateLevel4  

{  

double dbRevenue = 38500;  

NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];  

NSString* strTax =[self.viewController calculate:strRevenue];  

STAssertTrue([strTax doubleValue] == 7745, @”期望值是:7745 實際值是:%@”, strTax);  

}  

//測試月應納稅額超過35000元至55000元 用例5  

- (void)testCalculateLevel5  

{  

double dbRevenue = 58500;  

NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];  

NSString* strTax =[self.viewController calculate:strRevenue];  

STAssertTrue([strTax doubleValue] == 13745, @”期望值是:13745 實際值是:%@”, strTax);  

}  

//測試月應納稅額超過55000元至80000元 用例6  

- (void)testCalculateLevel6  

{  

double dbRevenue = 83500;  

NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];  

NSString* strTax =[self.viewController calculate:strRevenue];  

STAssertTrue([strTax doubleValue] == 22495, @”期望值是:22495 實際值是:%@”, strTax);  

}  

//測試月應納稅額超過80000元 用例7  

- (void)testCalculateLevel7  

{  

double dbRevenue = 103500;  

NSString *strRevenue = [NSString stringWithFormat:@"%f",dbRevenue];  

NSString* strTax =[self.viewController calculate:strRevenue];  

STAssertTrue([strTax doubleValue] == 31495, @”期望值是:31495 實際值是:%@”, strTax);  

}  

@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 如果表示式丟擲異常,則斷言失敗;

相關文章