在src / test / resources文件夹中编辑文件被认为是不好的做法

时间:2016-12-30 12:21:28

标签: java junit

来源: Java 8
IDE: Eclipse
测试: JUnit
构建工具: Maven
打包: WAR

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

我的问题是:

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

  2. 当我的代码使用maven在CI中运行时,这是否有影响。

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

2 个答案:

答案 0 :(得分:2)

不良做法。将资源中的文件用作模板。那是使用

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

在临时目录中,如果您愿意,可以在将来的某个时刻清理结果。

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

答案 1 :(得分:2)

  

考虑到这一点,修改此目录中的文件是不好的做法   代码库的一部分?

即使您更改了"仅限"测试目录,这不是一个好主意,因为如果您的测试不能正常运行(假设它们使测试资源文件不在预期和原始状态),您可能会在测试阶段产生副作用。

  

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

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

  

如果对1的答案为是,那么是否有可取的选择   方法

实际上,您将数据复制到src/test/resources内的新文件夹中。 我建议你只是将数据复制到一个文件夹中,你不会冒险在代码中产生任何副作用:target/test-classes

test-classes目录不用于包装工件。