首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为内部实例化协作者的方法编写单元测试?

如何为内部实例化协作者的方法编写单元测试?
EN

Stack Overflow用户
提问于 2017-01-16 03:10:20
回答 1查看 42关注 0票数 0

方法代码如下:

代码语言:javascript
复制
- (void)downloadSomething:(NSString *)url {
    Downloader *downloader = [[Downloader alloc] initWithUrl:url];
    NSData *data = [downloader download];
    FileCache *cache = [[FileCache alloc] initWithFile:@"download.cache"];
    cache.data = data;
    [cache save];
}

我认为我应该嘲笑Downloader和FileCache,以验证它是否运行良好。我考虑过像这样的变更签名:downloadSomething:(NSString *)url downloader:(Downloader *)downloader cache:(FileCache *)cache,但是在调用这个方法之前,它似乎需要做很多工作,这不是我想要的。

我用的是八基托。

此外,是否有使编写代码更易于测试的指南?

编辑: 2017-01-16 14:54:23

编写以下两种方法是一个好主意:

代码语言:javascript
复制
- (void)updateCacheWithUrl:(NSString *)url 
                downloader:(Downloader *)downloader 
                 fileCache:(FileCache *)fileCache; // for testing
- (void)updateCacheWithUrl:(NSString *)url; // call above method with (url, nil, nil);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-16 05:10:00

当在方法中实例化协作者时,这会创建紧密耦合。测试这方面的困难促使我们探索其他设计。

一种方法是通过他们。这是我通常会做的。然后,我将制作一个更简单的版本,为生产代码提供默认对象。

但是在您的示例中,url被传递给Downloader,这使得这更困难。这表明目前downloadSomething:的设计违反了单一责任原则。它做了两件事:下载和缓存。

因此,将这些职责分开可能会使测试变得更容易。

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

https://stackoverflow.com/questions/41668918

复制
相关文章

相似问题

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