Iphone 使用OCMock验证是否调用了方法

Iphone 使用OCMock验证是否调用了方法,iphone,objective-c,ocmock,sentestingkit,Iphone,Objective C,Ocmock,Sentestingkit,我是OCMock的初学者,我需要验证一个方法是否是从另一个类调用的。下面是我的代码 //Creating the OCMockObject id mockProductRequest = [OCMockObject mockForClass:[ProductRequest class]]; [[mockProductRequest expect] testProductRequest]; //Creating the object where the mock object will be

我是OCMock的初学者,我需要验证一个方法是否是从另一个类调用的。下面是我的代码

 //Creating the OCMockObject
id mockProductRequest = [OCMockObject mockForClass:[ProductRequest class]];
[[mockProductRequest expect] testProductRequest];

//Creating the object where the mock object will be invoked
ProductService *actualService = [[ProductService alloc] init];
[actualService testProductService];

[mockProductRequest verify];

-(void)testProductService{
//Method where the mock object's method is invoked
ProductRequest *request = [[ProductRequest alloc] init];
[request testProductRequest];
}

我似乎总是收到一个方法未被调用的异常。请帮我找出我做错了什么。

模拟对象的目的是替换要测试的对象。但是在代码中,您将消息testProductRequest发送给真实的ProductRequest,而不是MockObject

模拟对象的目的是替换要测试的对象。但是在代码中,您将消息testProductRequest发送给真实的ProductRequest,而不是MockObject

您必须在real ProductService中替换真实请求。例如,您可以将请求作为ProductService的一个属性进行归档,如下所示:

@interface ProductService
@property (strong) ProductRequest *request
然后像这样将真实的ProductRequest与模拟的ProductRequest交换

- (void)testProductService {
  id mockProductRequest = [OCMockObject mockForClass:[ProductRequest class]]; 
  [[mockProductRequest expect] testProductRequest];

  ProductService *actualService = [[ProductService alloc] init]; 
  actualService.request = mockProductReqeust;

  // call some method on actualService which invokes the request

  [request testProductRequest];


}

您必须在real ProductService中替换真实请求。例如,您可以将请求作为ProductService的一个属性进行归档,如下所示:

@interface ProductService
@property (strong) ProductRequest *request
然后像这样将真实的ProductRequest与模拟的ProductRequest交换

- (void)testProductService {
  id mockProductRequest = [OCMockObject mockForClass:[ProductRequest class]]; 
  [[mockProductRequest expect] testProductRequest];

  ProductService *actualService = [[ProductService alloc] init]; 
  actualService.request = mockProductReqeust;

  // call some method on actualService which invokes the request

  [request testProductRequest];


}

请您修改代码,使其在创建OCMockObject的位置变得清晰,好吗?@Pfitz我在代码中添加了注释,希望helpscan您可以修改代码,使其在创建OCMockObject的位置变得清晰?@Pfitz我在代码中添加了注释,希望helpsThanks@isoftom能帮助我找到正确的路径,非常感谢@iSoftTom引导我走上正确的道路,非常感谢@Pfitz提供了一个很好的例子。它还清楚地展示了如何使您的代码可测试。感谢@Pfitz提供了一个优秀的示例。它还清楚地显示了如何使代码可测试。