1

我是 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];
}

我似乎总是收到一个方法未被调用的异常。请帮我弄清楚我在这里做错了什么。

4

2 回答 2

3

您必须在 real 中替换 real 请求ProductService。例如,您可以通过使请求成为ProductService这样的属性来归档它:

@interface ProductService
@property (strong) ProductRequest *request

然后像这样将真实的 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];


}
于 2012-10-15T09:47:33.690 回答
2

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

于 2012-10-15T09:42:24.357 回答