单元测试可以让我们快速检测项目接口与一些功能的可用性,这次编写了大量的单元测试,让我对之前的一些疑惑有了一个透彻的理解
- 单元测试中,可以直接import我们项目中的类
- 想要执行的方法,必须使用test开头,testLogin会被执行,userLogin这样的方法名不会被执行
- 单元测试没有头文件,一些变量声明,写在interface里面
- 对于一些变量的初始化,放到setup里面进行
一个简单的单元测试类
创建单元测试类
一个简单的类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
@interface HelloTest : XCTestCase { //变量声明 NSInteger count; LoginService *loginService; }
@end
@implementation HelloTest
- (void)setUp { [super setUp];
//初始化 count = 5;
loginService = [[LoginService alloc] init];
}
- (void)tearDown {
[super tearDown]; }
- (void)testCount { XCTAssertEqual(count, 6,@"count不等于6,count的值为:%ld",(long)count); }
- (void)testExample {
XCTAssert(YES, @"Pass"); }
- (void)testPerformanceExample {
[self measureBlock:^{
}]; }
@end
|
cmd+U 进行执行后会提示我们如下错误,测试通过的方法,会有绿色对号,失败的方法会显示我们写的错误提示
XCTest的测试方法大都类似
XCTAssertGreaterThan
1 2
| XCTAssertGreaterThan(count, 8,@"count is not greater than 8");
|
XCTAssertNotEqual
1 2
| XCTAssertNotEqual(count, 5,@"they are equal");
|
XCTAssertTrue
1 2
| XCTAssertTrue(count>3,@"count greater than 3");
|
运行结果
对于异步方法的测试(Asynchronous Testing)
对于block等异步方式执行的方法,在测试的时候,我们要使用,一般的做法都是延迟,等待block执行完毕再进行检查
主要步骤
- 声明一个XCTestExpectation
- 在block中使用fulfill抛出错误
- waitForExpectationsWithTimeout进行一个延迟时间设定
比如上面的loginService
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| - (void)testLogin { XCTestExpectation *loginException = [self expectationWithDescription:@"loginError"];
[loginService sendLoginWithMobile:TEST_MOBILE andCode:TEST_CODE onComplete:^(NSDictionary *jsonDict, NSString *jsonString) { MStatus *status = [loginService convertToMStatus:jsonDict]; XCTAssertEqual(status.returncode, 0, @"login error");
//抛出错误 [loginException fulfill]; } onFailure:^(NSString *msg) { XCTFail(@"login error:%@",msg);
//抛出错误 [loginException fulfill]; }];
//延迟两秒执行 [self waitForExpectationsWithTimeout:2 handler:^(NSError *error) { XCTFail(@"time out:%@",error); }]; }
|