OCMock和NSFileManager

6

我正在尝试对一个使用NSFileManager检查文件是否存在并删除该文件的方法进行单元测试。我不确定我是否正确地设置了模拟对象。

即使我确定已经调用了该方法,但是我仍然收到“方法未被调用”的错误提示。我在设置模拟对象时是否遗漏了什么?

我按照以下方式设置了模拟对象:

- (void)testdeleteFileWithPath {

    id fileManagerMock = OCMClassMock([NSFileManager class]);

    OCMStub([NSFileManager defaultManager]).andReturn(fileManagerMock);

    NSString *filePath = @"testPDF.pdf";
    NSURL *fileURL = [self.documentsDirectory URLByAppendingPathComponent:filePath];

    [self.fileDAO deleteFileWithPath:filePath];

    OCMVerify([fileManagerMock fileExistsAtPath:[fileURL path]]);
}

- (void)deleteFileWithPath:(NSString *)filePath
{    
    if (filePath) {
        NSURL *fileURL = [self.documentsDirectory URLByAppendingPathComponent:filePath];

        NSError *error = nil;
        if (![[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) {
            NSLog(@"File to delete does not exist. \nPath: %@", [fileURL absoluteString]);

        } else
        {
            [[NSFileManager defaultManager] removeItemAtURL:fileURL error:&error];

            NSLog(@"Error: %@", [error description]);
        }
    }
}
2个回答

6

现在已经解决了。我没有在模拟对象上存根化该方法。代码应该如下所示:

id fileManagerMock = OCMClassMock([NSFileManager class]); 
OCMStub([fileManagerMock defaultManager]).andReturn(fileManagerMock);

2

您应该对对象实例 [fileManagerMock defaultManager] 进行部分模拟,而不是类: [NSFileManager class]:

注:部分模拟(Partial Mock)是指只模拟对象的某些方法,而非所有方法。

id fileManagerMock = [OCMockObject partialMockForObject[fileManagerMock defaultManager]];

似乎这会影响结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接