我正在使用一个非常简单的 Web 服务,它使用基类来重用一些常用功能。被测试的 main 方法只是简单地构建一个 url,然后它使用带有这个参数的 super / base 方法。
- (void)getPlacesForLocation:(Location *)location WithKeyword:(NSString *)keyword
{
NSString *gps = [NSString stringWithFormat:@"?location=%@,%@", location.lat, location.lng];
NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@%@", self.baseurl, gps]];
[super makeGetRequestWithURL:url];
}
这是基本方法定义
@implementation WebService
@synthesize responseData = _responseData;
- (id)init
{
if (self == [super init])
{
self.responseData = [NSMutableData new];
}
return self;
}
- (void)makeGetRequestWithURL:(NSURL *)url
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
request.HTTPMethod = @"GET";
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
在我的测试中,我创建了一个部分模拟,因为我仍然想调用我的测试对象,但我需要能够验证超级方法是以特定方式调用的。
- (void)testGetRequestMadeWithUrl
{
self.sut = [[SomeWebService alloc] init];
Location *location = [[Location alloc] initWithLatitude:@"-33.8670522" AndLongitude:@"151.1957362"];
NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@%@", self.sut.baseurl, @"?location=-33.8670522,151.1957362"]];
id mockWebService = [OCMockObject partialMockForObject: self.sut];
[[mockWebService expect] makeGetRequestWithURL:url];
[self.sut getPlacesForLocation:location WithKeyword:@"foo"];
[mockWebService verify];
}
然而,当我运行此测试时,我失败并出现以下错误:
未调用预期的方法:makeGetRequestWithURL:https://...
我可以说这个方法没有被模拟,因为如果我将 NSLog 放入基本方法中,它会在我运行 ocunit 测试时显示(显然它正在运行,只是没有按照我的意愿模拟它)。
如何修改我的测试/重构我的实现代码以获得我正在寻找的断言?