嵌入式mongo + spring配置单元测试失败(无法加载应用程序上下文)

时间:2016-05-31 07:49:02

标签: java spring intellij-idea spring-data embedded-database

我不确定这是嵌入式mongo问题还是弹簧配置问题,也许其他人遇到了同样的问题。

我在Intellij中设置了一个spring + maven项目,并在测试范围内嵌入了mongo。

问题:当我右键单击测试java文件夹以运行所有测试时,我得到了可怕的应用程序上下文错误(详见下文)。然而,单独运行测试,甚至包装都很好。我发现有一个测试(巧合是在整个集合中运行的第一个)导致中断,如果我删除它,我可以再次运行所有测试。我们称之为TestA。我想了解为什么这一项测试会导致所有其他测试失败,以及如何修复它(因为我真的很想进行测试!)。

所有测试都扩展了一个以此为基础的基类( {/ 1}}的除外):

TestA

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = {Config.class, MongoConfig.class}) @WebAppConfiguration @IntegrationTest("${port}") @Component 略有不同,因为它不需要运行Mongo,但确实需要spring来自动装配服务。我认为这样可以,但不是:

TestA

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = {Config.class}) @Component 只是注释:

MongoConfig.class

加上用于创建mongo进程的@Configuration @EnableAutoConfiguration(exclude = { EmbeddedMongoAutoConfiguration.class }) @EnableMongoRepositories(basePackages = "<my package>")

@Bean有这些注释并且空体:

Config.class

但是,如果我尝试运行所有测试,它们都会失败并出现以下错误:

@Configuration
@EnableAutoConfiguration(exclude = {EmbeddedMongoAutoConfiguration.class})
@ComponentScan(value = {<list of packages>})
@EnableMongoRepositories(basePackages = {"my package"})

我的理解是,通过添加 java.lang.IllegalStateException: Failed to load ApplicationContext <huge stack trace eventually ending with...> Caused by: java.nio.file.FileAlreadyExistsException: C:\Users\john\AppData\Local\Temp\extract-john-extractmongod.exe at sun.nio.fs.WindowsFileCopy.copy(WindowsFileCopy.java:124) at sun.nio.fs.WindowsFileSystemProvider.copy(WindowsFileSystemProvider.java:278) at java.nio.file.Files.copy(Files.java:1274) at de.flapdoodle.embed.process.extract.ExtractedFileSets.copy(ExtractedFileSets.java:54) at de.flapdoodle.embed.process.store.ExtractedArtifactStore.extractFileSet(ExtractedArtifactStore.java:110) at de.flapdoodle.embed.process.runtime.Starter.prepare(Starter.java:56) ... 192 more 嵌入式mongo以某种方式尝试每次都启动它?

我的临时解决方案是删除TestA中的注释并扩展上述基类。这使得一切正常,但并不是真的正确。我需要的是TestA上的正确注释,以便它与其他测试协同工作。

依赖关系

TestA

弹簧配置

我没有使用xml文件,而是设置了与yml文件绑定的类配置文件(在Intellij中添加到模块的facet)。

0 个答案:

没有答案