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

Posted

技术标签:

【中文标题】我可以为外部服务 (iPhone) 构建单元测试吗?【英文标题】:Can I build a Unit Test for an External Service (iPhone)? 【发布时间】:2011-12-13 00:08:13 【问题描述】:

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

如何为在带外输入响应代码之前不完整的方法设置单元测试?

有什么想法吗? ios SDK 4.2

【问题讨论】:

【参考方案1】:

使用 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;

【讨论】:

以上是关于我可以为外部服务 (iPhone) 构建单元测试吗?的主要内容,如果未能解决你的问题,请参考以下文章

Rails Rest API 外部测试

App.config 替换单元测试

什么是开始使用 OCUnit 进行 iPhone 单元测试的好教程?

Iphone 单元测试错误:权限被谷歌工具箱拒绝

iPhone 验收/单元测试

如何使用 Kafka Streams 为应用程序编写单元测试用例