我的代码中有一个测试,它创建一个目录,然后在其中创建一个文件。单元测试由于surefire插件forkmode而失败
但是,此测试失败,因为写入文件的测试部分无法找到所创建的目录。修复它的唯一的事情就是设置万无一失插件不会分支,像这样:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>never</forkMode>
</configuration>
</plugin>
我会解释此修复程序意味着目录在一个JVM过程中产生的,而在另一个JVM进程创建的文件/线程?
此测试失败与最近刚开始失败的单台机器隔离。
,我已经尝试了几件事情是:
- 有众多的JDK版本流传在系统上,因此摆脱了所有的不同之处在于工作在许多其他系统的一个(1.6 .0_19)。
- 尝试从Administrator cmd提示符运行该项目上的'mvn test'。
- 检查父目录的权限是否正确。
- 尝试从零开始检查整个项目并执行相同操作。
- 检查发生此事的目录是否从AntiVirus的按访问扫描程序中排除。
以上都没有任何效果。唯一有所作为的是<forkMode>
配置。我无法弄清楚为什么那个测试突然停止工作,因为它周围绝对没有任何代码变化或者它正在测试的功能。
正在使用的maven-surefire-plugin的版本是2.12.4。如果'never'配置丢失,更新到最新(2.14.1)不会修复测试。
<forkMode>
是deprecated但是仅在版本2.14以后。
我真的很感兴趣的是潜在的问题可能是什么。我希望最终的结论不像硬盘或硬件问题那么简单。
是在测试'setUp()'方法中还是在另一个测试用例中创建的目录?你为每个测试创建不同的目录还是在测试中共享?请记住,测试用例可能会重新排序或并行运行,并且 - 根据测试逻辑 - 可能导致目录的并发修改。 – Pyranja 2013-04-24 08:22:03
奇怪!我不太清楚这是两个单独的测试来创建目录并写入文件,或者如果两个事件都发生在相同的测试方法中?测试执行顺序可以由测试运行器随机重新排序。 – 2013-04-24 08:24:36
@Pyranja现货!该目录是在setUp()方法中创建的,并且有两个测试然后尝试在该目录中创建文件。但我也曾在评论过所有其他测试之后尝试过,但那次测试失败了。 – 2013-04-24 10:47:47