Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使Spring忽略@autowired jmsTemplate字段以进行测试?_Java_Spring_Jms_Autowired - Fatal编程技术网

Java 如何使Spring忽略@autowired jmsTemplate字段以进行测试?

Java 如何使Spring忽略@autowired jmsTemplate字段以进行测试?,java,spring,jms,autowired,Java,Spring,Jms,Autowired,我创建了一个类,该类使用JMSTemplate将电子邮件请求放入JMS队列 问题是,当我运行单元测试时,它抛出一个异常,因为它无法创建发送方bean,因为JBoss应用服务器提供的自动连接JMSTemplate bean存在问题。当然,它不能自动连线。执行单元测试时JBoss未运行 因此,我创建了两个spring上下文配置:一个用于生产范围,一个用于测试范围。在测试上下文配置中,我已经从包含Sender类的包中删除了组件扫描。它不起作用,因为Sender类正在其他地方使用,所以我摆脱了JMSTe

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

问题是,当我运行单元测试时,它抛出一个异常,因为它无法创建发送方bean,因为JBoss应用服务器提供的自动连接JMSTemplate bean存在问题。当然,它不能自动连线。执行单元测试时JBoss未运行

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

必须创建发送方bean。 Spring是否有任何方法可以忽略单个自动连线字段以进行测试? 我计划在集成测试期间测试发送器特性

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

看起来我自己用以下方法解决了这个问题:

@Autowired(required=false)
在冲突的自动连线字段上。 我希望它能帮助别人


但是,允许单元测试影响生产代码的更改可能不是最好的主意,因此在测试期间连接虚拟JmsTemplate可能是理想的解决方案。

看起来我自己通过使用以下方法解决了这个问题:

@Autowired(required=false)
在冲突的自动连线字段上。 我希望它能帮助别人


但是,允许单元测试影响生产代码的更改可能不是最好的主意,因此在测试期间连接一个虚拟JmsTemplate可能是理想的解决方案。

如果您使用基于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();

MyInvocationHandler
InvocationHandler
的一个简单实现,它只强制转换一个
不支持的操作异常

如果您使用基于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();

MyInvocationHandler
InvocationHandler
的一个简单实现,它只是抛出了一个
UnsupportedOperationException

可能重复的@moghadam我不知道或者根本没有回答我的问题可能重复的@moghadam我不知道或者没有真的回答我的问题吗