tdd为decorator模式编写junit测试的步骤

时间:2014-04-24 05:16:50

标签: java unit-testing junit tdd

  

是否可以为下面的功能编写单元测试?

,或者

  

是否可以使用TDD开发以下功能?

public ZipInputStream getZipInputStream(File zipFile) throws FileNotFoundException {
        ZipInputStream zipInputStream = new ZipInputStream(
                new FileInputStream(zipFile));
        return zipInputStream;
}

我知道这个问题可能听起来很愚蠢,但作为TTD的新手,我无法找到上述任何解决方案:)。

3 个答案:

答案 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()之类的名称或者其他东西......)。