单元测试方法用的NSData dataWithContentsOfURL(Unit test met

2019-10-18 18:07发布

我正在开发iOS应用程序,我试图用测试驱动的开发做到这一点。 我一直在阅读关于这个问题的很多,我在一个偶然的事情之一本书是测试应该是快速的,可重复的和可靠的 。 因此,写网络代码的测试时,测试应该“模拟”的网络,以便它可以在不考虑网络的可用性执行。

在我的代码我有一个从互联网上获取的图像与URL,其刻度并将其存储在使用dataWithContentsOfURL从NSData的文件系统的方法:

+ (void) getImage:(NSString *)imageUrl {

    UIImage *image = [UIImage imageWithData:
        [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]];

    // Scale image
    // Save image in storage 
}

我的问题是:什么是测试这种方法的好方法,让测试通过时的代码是正确的,当它不是,失败没​​有考虑到可能的网络故障?

目前在我的测试中我忽略了该方法需要一个连接,只是希望结果是正确的事实。 不过,我已经看到我的时候试衣服的增长这会成为一个问题,因为他们已经采取了相当多的时间来运行。 更重要的是,我不希望我的测试中,因为没有良好的网络连接,因为我相信这不是他们的目的只是失败。 我明白任何建议。

Answer 1:

你打算让你的测试快速,可靠和可重复的是好的。 删除网络上的依赖是一个伟大的方式来帮助实现这些目标。

而不是被锁定,因为它现在的方法,请记住,你要使用的工具被称为测试- 驱动开发。 测试是不是只是一个包装,以确保您的代码工作作为写。 它是一种方式来发现的方式,你的代码可以改进,使其更容易测试,可靠,可重复使用等

为了消除网络的依赖,可以考虑通过一个网址(参数的名字已经是IMAGEURL),而不是一个字符串。 这样,您就可以创建网址到本地文件系统 ,而不是在网络上的某个位置。

我也注意到你的方法确实做了很多工作。 这描述了其真正做可能是loadImageFromURLAndScaleItAndSaveItToDisk的名称:。 为什么不把它分解成几个较小,更易测试的方法呢? 也许有,从一个网址,一个可以扩展的图像和一个图像保存到本地文件系统加载的图像。 你可以测试每个单独的部分,然后再拍单元测试,通过对调用,以便在更小的方法的结果比较其业绩考验你的原始方法。

我想我也可以说,保持快速的测试,可靠和可重复的是一个很好的目标,但如果你想进行测试是“慢”或“不是1000%可靠”那 。 提供价值给你的测试比不写一个测试,因为你不认为这是一个好足够的测试更好。

我知道大多数的是一般,但我希望它能帮助。



文章来源: Unit test method with NSData dataWithContentsOfURL