单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。
大型项目开发,功能比较繁琐,代码量比较大,调试某一块功能需要不断的Command+R运行调试,很显然这样的功能是非常非常的低效的,编写过程中以及App功能完成后为检测某一块功能,利用单元测试更有针对性的测试功能。两个字——高效!
1.新工程默认会勾选
2.为老工程添加单元测试
点击File
—–>New
——->Target
UnitTestsDemoTests类是继承与 XCTestCase的
#import <XCTest/XCTest.h>
@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太强大了?
警告不通过符号,说明这个模块出现问题
通过符号,表示这个模块没有问题
自定义测试方法必须以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
-(void)testClassName { PersonModel *perModel=[[PersonModel alloc]init]; XCTAssertEqual(perModel.name, @"单元测试",@"name跟预期的不相等呀"); }
真开心,利用单元测试检测,都正常,开开心心下班去。O(∩_∩)O