gpt4 book ai didi

java - 如何让 Spring 忽略 @autowired jmsTemplate 字段以进行测试?

转载 作者:太空宇宙 更新时间:2023-11-04 07:22:25 25 4
gpt4 key购买 nike

我创建了一个类,使用 JMSTemplate 将电子邮件请求放入 JMS 队列。

问题是,当我运行单元测试时,它会抛出异常,因为它无法创建 Sender bean,因为 JBoss 应用程序服务器提供的 Autowiring JMSTemplate bean 存在问题。当然,它不能 Autowiring 它。进行单元测试时 JBoss 未运行。

因此,我创建了两种 spring 上下文配置:一种用于生产范围,一种用于测试范围。在测试上下文配置中,我已从包含 Sender 类的包中删除了组件扫描。它不起作用,因为 Sender 类正在其他一些地方使用,所以我摆脱了 JMSTemplate 问题并用另一个 bean 创建错误替换它。

必须创建 Sender bean。Spring 有什么办法可以出于测试目的而忽略单个 Autowiring 字段吗?我计划在集成测试期间测试 Sender 功能。

我认为在这种情况下不需要任何代码。谢谢。

最佳答案

如果您使用基于java的容器配置,您可以在测试配置中代理bean。我们遇到了类似的问题,最终得到了一个解决方案,在测试上下文配置中忽略 ComponentScan 中的有问题的 bean,并创建一个简单的代理

忽略 bean 的配置示例:

@Configuration
@ComponentScan( // ...
excludeFilters = {
@ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE, value = IgnoredInterface.class)
}

代理 bean 创建示例:

@Bean 
public IgnoredInterface ignoredInterface() {
return (IgnoredInterface) Proxy.newProxyInstance(
IgnoredInterface.class.getClassLoader(),
new Class[] { IgnoredInterface.class },
new MyInvocationHandler();

MyInvocalHandlerInvocableHandler 的简单实现,仅强制转换 UnsupportedOperationException

关于java - 如何让 Spring 忽略 @autowired jmsTemplate 字段以进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107810/

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