首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCMock和NSFileManager

OCMock和NSFileManager
EN

Stack Overflow用户
提问于 2015-03-26 00:52:49
回答 2查看 793关注 0票数 6

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

我得到了“方法没有被调用”,尽管我确定它是被调用的。我是不是在设置的方式中遗漏了什么?

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

代码语言:javascript
复制
- (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]);
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2015-04-15 18:50:42

现在开始工作了。我没有截断mock对象上的方法。代码应如下所示:

代码语言:javascript
复制
id fileManagerMock = OCMClassMock([NSFileManager class]); 
OCMStub([fileManagerMock defaultManager]).andReturn(fileManagerMock);
票数 6
EN

Stack Overflow用户

发布于 2015-04-18 04:19:48

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

代码语言:javascript
复制
id fileManagerMock = [OCMockObject partialMockForObject[fileManagerMock defaultManager]];

这很可能会影响结果

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29261758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档