方法代码如下:
- (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
编写以下两种方法是一个好主意:
- (void)updateCacheWithUrl:(NSString *)url
downloader:(Downloader *)downloader
fileCache:(FileCache *)fileCache; // for testing
- (void)updateCacheWithUrl:(NSString *)url; // call above method with (url, nil, nil);发布于 2017-01-16 05:10:00
当在方法中实例化协作者时,这会创建紧密耦合。测试这方面的困难促使我们探索其他设计。
一种方法是通过他们。这是我通常会做的。然后,我将制作一个更简单的版本,为生产代码提供默认对象。
但是在您的示例中,url被传递给Downloader,这使得这更困难。这表明目前downloadSomething:的设计违反了单一责任原则。它做了两件事:下载和缓存。
因此,将这些职责分开可能会使测试变得更容易。
https://stackoverflow.com/questions/41668918
复制相似问题