gpt4 book ai didi

java - Spring 和 JUnit |如何禁用特定测试类的 spring 测试上下文缓存?

转载 作者:行者123 更新时间:2023-11-29 07:46:01 37 4
gpt4 key购买 nike

我的代码有许多集成测试类 - ServiceTest1ServiceTest2 ...、ServiceTestN。所有测试都使用相同的测试上下文 (MyAppContext.xml) 通过 spring 执行。

如下面的代码片段所示,ServiceTest1 测试上下文需要覆盖其中一个 bean,并且该更改ServiceTest1.

执行时,ServiceTest1 按预期工作。但是,当执行其他测试时(例如代码段中的 ServiceTest2),它会因 spring 初始化错误而失败,因为 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: Failed to load ApplicationContext

...

Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:/WEB-INF/applicationContext-security]

Offending resource: URL [file:/path/to/MyAppContext.xml]; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Duplicate detected.

Offending resource: class path resource [WEB-INF/applicationContext-security.xml]

最佳答案

使用 @DirtiesContext 注释,在类级别添加它。

在测试类执行后,它将刷新 spring 应用程序上下文。

文档:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/annotation/DirtiesContext.html

关于java - Spring 和 JUnit |如何禁用特定测试类的 spring 测试上下文缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25740895/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com