單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函數,Java裡單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。總的來說,單元就是人為規定的最小的被測功能模塊。
大型項目開發,功能比較繁瑣,代碼量比較大,調試某一塊功能需要不斷的Command+R運行調試,很顯然這樣的功能是非常非常的低效的,編寫過程中以及App功能完成後為檢測某一塊功能,利用單元測試更有針對性的測試功能。兩個字——高效!
1.新工程默認會勾選
2.為老工程添加單元測試
點擊File
—–>New
——->Target
UnitTestsDemoTests類是繼承與 XCTestCase的
#import
@interface UnitTestsDemoTests : XCTestCase
@end
@implementation UnitTestsDemoTests
- (void)setUp {
[super setUp];
/**
* 每個test方法執行之前調用
*
*/
}
- (void)tearDown {
[super tearDown];
/**
* 每個test方法執行之後調用
*/
}
- (void)testExample {
/**
* 命名為Example的測試方法
*/
}
- (void)testPerformanceExample {
//主要檢測代碼的執行性能
[self measureBlock:^{
}];
}
@end
Xcode7默認帶了測試性能的方法- (void)testPerformanceExample
很有意思的一個方法
- (void)testPerformanceExample {
// This is an example of a performance test case.
[self measureBlock:^{
// Put the code you want to measure the time of here.
for(int i=0;i<1000;i++)
{
NSLog(@"%d",i);
}
}];
}
重復執行上面的代碼,會收集每次執行的時間,並計算出平均值,每次執行後會跟平均值進行比較,給你參考性的提示。
當我們把i的值後面增添一個0
有意思一幕發生
XCode檢測到這一次運行,遠超過了平均值,給出了紅色的警告,是不是感覺XCode太強大了?
警告不通過符號,說明這個模塊出現問題<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20160501/20160501123128294.png" title="\" />通過符號,表示這個模塊沒有問題
自定義測試方法必須以test方法名開頭(testXXX),例如上面的testExample
自定義方法必須為void
返回類型
-(void)testFloatEqual{}
XCTAssertEqualObjects(a1, a2, description, …)
XCTAssertEquals(a1, a2, description, …)
XCTAssertEqualsWithAccuracy(a1, a2, accuracy,description, …)
XCTFail(description, …)
XCTAssertNil(a1, description, …)
XCTAssertNotNil(a1, description, …)
XCTAssertTrue(expr, description, …)
XCTAssertTrueNoThrow(expr, description, …)
XCTAssertFalse(expr, description, …)
XCTAssertFalseNoThrow(expr, description, …)
XCTAssertThrows(expr, description, …)
XCTAssertThrowsSpecific(expr, specificException, description, …)
XCTAssertThrowsSpecificNamed(expr, specificException, aName, description, …)
XCTAssertNoThrow(expr, description, …)
XCTAssertNoThrowSpecific(expr, specificException, description, …)
XCTAssertNoThrowSpecificNamed(expr, specificException, aName, description, …)
-(void)testFloatEqual{
NSLog(@"這是自定義的測試方法");
float a=100.00;
XCTAssertEqual(a, 100.00,@"測試不通過");
}
先在XCode創建一個類名為PersonModel ,添加一個屬性名為name
@interface PersonModel : NSObject
@property(nonatomic,strong)NSString *name;
@end
@implementation PersonModel
-(id)init
{
if (self=[super init]) {
_name=@"單元測試";
}
return self;
}
@end
在測試單元創建一個類
點擊右鍵,New Test Class
注意此類繼承與XCTestCase
在頭文件中引入#import "PersonModel.h"
自定義一個測試方法
-(void)testClassName
{
PersonModel *perModel=[[PersonModel alloc]init];
XCTAssertEqual(perModel.name, @"單元測試",@"name跟預期的不相等呀");
}