您想研究 Mocks(或双打)。一般来说,这是在进行测试以绕过服务器调用、打印、日志记录等事情时转移调用的一种方式......
在最简单的形式中,您只需将要为测试修改的对象子类化即可。
说你有
@interface YourClass : NSObject
@property NSString *dataFromServer;
@end
@implementation YourClass
-(void) load
{
// Bunch of calls to the server you don't want to do while testing.
self.dataFromServer = dataFromServerCallsYouDontWantToRun;
}
-(NSString*) getServerData
{
return dataFromServer;
}
@end
假设您想测试 getServerData,但不想因为调用数据库而实际运行负载。假设您只想将 dataFromServer 硬编码为 @"Mock"。
在您的 UnitTest 项目中,从 YourClass 继承并覆盖您不想在测试中实际运行的任何函数。
@interface YourClassMock : YourClass
@end
@implementation YourClassMock
-(void) load
{
NSLog(@"In Mock");
self.dataFromServer = @"Mock";
}
@end
现在你的测试看起来像这样
- (void) testLoad
{
YourClassMock yourClass = [[YourClassMock alloc] init];
[yourClass load];
STAssertEquals([yourClass getServerData], @"Mock", @"Returns mock data");
}
因此,您无需实际调用复杂的加载方法即可全面测试 getServerData。
这是一个基本的,自己动手做的例子,但是有很多库可以帮助加快这个速度,比如 OCMock (http://ocmock.org/)。这可以为您创建模拟对象,而无需子类。你应该调查一下。但希望您了解如何使用它。更多信息 - http://nshipster.com/unit-testing/