我可以为外部服务(iPhone)构建单元测试吗?

时间:2011-12-13 00:08:13

标签: iphone xcode unit-testing

我的应用程序注册了外部服务。该服务打电话给我一个两位数的代码,我必须输入(仅限第一次)才能使用该服务。之后对服务的其余调用工作正常。

如果在带外输入响应代码之前,我如何设置一个尚未完成的方法的单元测试?

有什么想法吗? iOS SDK 4.2

1 个答案:

答案 0 :(得分:0)

使用OCMock模拟服务,允许您使用存根并返回预期结果。

例如:

假设这是您的服务:

@interface ServiceClass
- (NSString *) fetchData;
@end

这将是您的模拟服务

id serviceMock = [[OCMockObject niceMockForClass:[ServiceClass class]];
[[[serviceMock stub] andreturn:@"56"] fetchData];
// we tell the mock to return the string "56" when the method fetchData is called

SomeViewController *mvc = [[SomeViewController alloc] init];
mvc.webService = serviceMock;
// Here we are injecting a mock into a view controller

您可以使用一些依赖注入技术将此模拟注入视图控制器

@synthesize webService = _webService;

- (IBAction)buttonClicked:(id)sender
{
   NSString *result = [self.webService fetchData];
}

- (ServiceClass *)webService
{
   if (!_webService)
   {
      _webService = [[ServiceClass alloc] init];
   }

   return _webService;
}