2016-12-30 38 views
2

源编辑文件:的Java 8
IDE: Eclipse的
测试:的JUnit
生成工具: Maven的
包装: WAR是它认为不好的做法在src /测试/资源文件夹

我需要JUnit测试我的代码,操纵Excel文件。我打算保留一些示例Excel文件src/test/resources文件夹。使用@Before我会在src/test/resources(带有时间戳)内创建一个新文件夹,然后在其中复制示例Excel文件。然后测试将对这些文件进行操作,然后删除测试的时间戳文件夹@After

我的问题是:

  1. 这是不好的做法,在这个目录中修改文件考虑到它是代码库的一部分?

  2. 当我的代码在使用maven的CI中运行时,这会产生影响吗?

  3. 如果1的答案为是,那么是否有可取的替代方法。

回答

2

不好的做法。使用资源中的文件为模板。这是一个使用

Path target = Files.createTemp... 
Files.copy(MyClass.class.getResourceAsStream("/..."), target); 

在一个临时目录中的结果将在未来的某个时刻进行清理,如果你想使复制它们。

在某些情况下,而不是临时directoy,可以写入目标构建目录。例如为你自己的Maven报告插件。但是对于上面的测试应该这样做。

2

修改此目录中的文件是不好的做法,因为它是 代码库的一部分?

即使你改变“只”测试目录的内容,这不是一个好主意,因为你可能会产生在测试阶段的副作用,如果你的测试不循规蹈矩,他们应该(假设他们留下一个测试资源文件未处于预期状态和原始状态)。

当我的代码在使用maven的CI中运行时,这会产生影响吗?

我不明白为什么它会在这种环境中或多或少地成为一个问题。最糟糕的是我认为在开发环境中,因为如果测试执行产生了副作用,您可能会犯下不希望有的事情。

如果答案是1,那么有没有可取的替代方案 方法。

实际上,您将数据复制到src/test/resources内的新文件夹中。 我建议你只是简单地将数据复制到不存在风险的文件夹中,以便在代码中创建任何副作用:target/test-classes

该目录不用于工件的包装。

相关问题