iOS開發那些事–編寫OCUnit測試方法-邏輯測試方法 – iPhone手機開發技術文章 iPhone軟體開發教學課程

應用測試和邏輯測試

 

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

 

編寫OCUnit測試方法

 

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

 

1、邏輯測試方法

 

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

 

LogicTest.h的代碼如下:

 

[cpp] 

#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  

 

#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

 如果表達式拋出異常,則斷言失敗; 

 

 

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *