我创建了一个使用JMSTemplate将电子邮件请求放入JMS队列的类。
问题在于,当我运行单元测试时,它会抛出异常,因为它无法创建Sender bean,因为JBoss Application Server提供的自动装配JMSTemplate bean存在问题。当然,它不能自动装配它。在进行单元测试时,JBoss没有运行。
所以我创建了两个spring上下文配置:一个用于生产范围,另一个用于测试范围。在测试上下文配置中,我已从包含Sender类的包中删除了组件扫描。它没有用,因为在其他一些地方使用了Sender类,所以我摆脱了JMSTemplate问题并用另一个bean创建错误替换它。
必须创建Sender bean。 有没有什么方法可以忽略单个自动连接字段用于测试目的? 我正计划在集成测试期间测试Sender功能。
在这种情况下,我认为不需要任何代码。 谢谢。
答案 0 :(得分:1)
如果您正在使用基于javabased的容器配置,则可以在测试配置中代理该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
答案 1 :(得分:0)
看起来我设法通过使用:
自行解决@Autowired(required=false)
在冲突的自动装配字段上。 我希望它有所帮助。
然而,允许单元测试影响生产代码的变化可能不是最好的想法,因此在测试期间模拟JmsTemplate可能是理想的解决方案。