1

我想对继承自 NSURLConnection 的类的自定义 init 方法进行单元测试 - 如果我的可测试类的 init 调用,我将如何执行此操作NSURLConnection's initWithRequest

我正在使用 OCMock,通常,我可以模拟测试类中包含的对象。对于这种继承场景,最好的方法是什么?

- (void)testInit
{   
    id urlRequest = [OCMockObject mockForClass:[NSURLRequest class]];

    MyURLConnectionWrapper *conn = [[MyURLConnectionWrapper alloc] 
                    initWithRequest:urlRequest delegate:self 
                    someData:extraneousData];
}

我的类是这样实现的:

@interface MyURLConnectionWrapper : NSURLConnection {

}
- (id)initWithRequest:(NSURLRequest *)request 
             delegate:(id)delegate someData:(NSString *)fooData
@end

@implementation MyURLConnectionWrapper

- (id)initWithRequest:(NSURLRequest *)request 
             delegate:(id)delegate someData:(NSString *)fooData
{
    if (self = [super initWithRequest:request delegate:delegate]) 
    {
        // do some additional work here
    }

    return self;
}

这是我得到的错误:

OCMockObject [NSURLRequest]:调用了意外的方法:_CFURLRequest

4

2 回答 2

1

如果您更改mockForClassniceMockForClass,您将获得一个存根对象,该对象将默默地忽略您不关心的消息,但您仍然可以为您关心的调用设置期望:

id urlRequest = [OCMockObject niceMockForClass:[NSURLRequest class]];
于 2010-07-08T20:18:06.420 回答
0

您的包装器正在调用真实的东西:[super initWithRequest ...],并且 NSURLRequest 正在调用一些您尚未设置期望的方法 _CFURLRequest。由于您正在制作包装器,因此您正在“存根” NSURLConnection 而不是“模拟”它。而且你可能不想接触真实的物体。您可以使您的包装器实现您的被测单元将调用的任何方法并在其中执行断言。由于您没有从 NSURLConnection 制作 OCMockObject ,因此您不能使用验证方法。

我仍然是在 Objective-C 中模拟的新手,所以我还没有模拟 NSURLConnection 的方法。

于 2010-02-02T21:31:48.207 回答