我的代码有许多集成测试类 - ServiceTest1
,ServiceTest2
...,ServiceTestN
。
使用相同的测试上下文(MyAppContext.xml
),使用spring执行所有测试。
如下面的代码段所示,ServiceTest1
测试上下文需要覆盖其中一个bean,并且该更改与ServiceTest1
仅相关。
执行时,ServiceTest1
按预期工作。但是,当执行其他测试(例如代码段中的ServiceTest2
)时,由于spring缓存MyAppContext.xml
测试上下文而导致ServiceTest1
测试上下文操作与其他测试。
我正在寻找一种方法来避免缓存ServiceTest1
测试上下文(例如根据@ContextConfiguration使其缓存密钥唯一)。
请注意,完全禁用缓存不是理想的解决方案。
有什么想法吗?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class ServiceTest1 {
// some tests ...
@Configuration
@ImportResource({"classpath*:MyAppContext.xml"})
static class Context {
@Bean
@Primary
ServiceOne serviceOne() {
// instantiate something ...
}
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:MyAppContext.xml"})
public class ServiceTest2 {
// some tests ...
}
谢谢!
修改:
Spring初始化错误是:
java.lang.IllegalStateException:无法加载ApplicationContext
...
引起:org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:无法从URL位置导入bean定义[classpath:/ WEB-INF / applicationContext-security]
违规资源:URL [file:/path/to/MyAppContext.xml];嵌套异常是org.springframework.beans.factory.parsing.BeanDefinitionParsingException:配置问题:检测到重复。
违规资源:类路径资源[WEB-INF / applicationContext-security.xml]
答案 0 :(得分:4)
使用@DirtiesContext
注释,在课程级别添加。
然后在测试类执行后刷新spring应用程序上下文。