是否可以为下面的功能编写单元测试?
,或者
是否可以使用TDD开发以下功能?
public ZipInputStream getZipInputStream(File zipFile) throws FileNotFoundException {
ZipInputStream zipInputStream = new ZipInputStream(
new FileInputStream(zipFile));
return zipInputStream;
}
我知道这个问题可能听起来很愚蠢,但作为TTD的新手,我无法找到上述任何解决方案:)。
答案 0 :(得分:3)
您已经在一个问题中提出了两个问题。
是否可以为下面的功能编写单元测试?
大多数人都不会将此功能的测试视为单元测试",因为它必须与文件系统进行交互。因此,它更像是集成测试,而不是单元测试。但是,无论它是否可能,它都不是一个好主意。这里没有什么值得测试的。这种方法没有任何自己的逻辑,因此测试它没有任何好处。你要测试的只是Java API。
是否可以使用TDD开发以下功能?
使用TDD时,您编写的代码符合明确的可测试要求。这么小的东西不太可能有自己的要求。导致编写此代码的要求将与处理zip文件中的数据有关。所以你要编写一个比这更多的方法 - 当然先写一下该方法的测试。
然而,TDD过程的第三步是重构。 (记住"红色" - "绿色" - "重构" - "红色" - "绿色" - &#34 ;重构&#34)。您最终可能会编写您引用的方法;不是试图进行测试,而是通过在重构步骤中从更大的方法中提取它。所以答案是肯定的,可以开发这个功能,但很可能是在" refactor"步骤,而不是在"绿色"步骤
答案 1 :(得分:1)
您基本上将2个平台调用(new ZipInputStream()
和new FileInputStream()
)组合在一起,没有特定的逻辑或条件。
这很简单,我甚至不打扰测试那个。
在任何情况下,您都不可能测试驱动器装饰器模式,因为它不是由您实现的。装饰者本身就是ZipInputStream
。
答案 2 :(得分:0)
您可以尝试编写一个测试方法,接收输入流,装饰您将提供的模拟ZipFile。创建模拟,以便它返回伪ZipEntry实例,稍后您可以根据ZipInputStream的getNextEntry()
方法进行验证。
这样你就可以测试返回的ZipInputStream是否真正装饰了提供的ZipFile(我建议使用testReturnedZipInputStreamDecoratesProvidedZipFile()
之类的名称或者其他东西......)。