我如何将“nulls”注入自动布线的弹簧豆?
问题描述:
我在写单元测试,并且有一个相当复杂的设置。我如何将“nulls”注入自动布线的弹簧豆?
依赖bean设置一些侦听器并将它们传递给自动装配的服务。
我想测试一下侦听器是否存在,但不会调用它们,所以我想通过'null'而不是autowired服务。 (具体是:我没有制定者...)
@Autowired
SomeService1 service1
@Autowired
SomeService2 service2
public List getListeners() {
List l = new ArrayList();
l.add(new AaaListener(service1));
l.add(new BbbListener(Service2));
return l;
}
@Test
public void testListeners() {
int exptecedSize = 2;
sut.doSomething();
List l = sut.getX().getY().getListeners()
assertEquals(expectedSize,l.size());
}
注意,SUT确实间接地从返回听众类的依赖。
由于这是一个非常小的例子,来自一个大的设置,我做了具体的不想在这里使用模拟因为我想测试只存在不是听众的行为。
嘲笑这样的服务20或30会大大减缓测试。
问题:将这些空值注入自动布线实例变量的最简单方法是什么?
A)添加setters?
B)ReflectionUtils?
C)java-config + @Beans + return null?
答
当类被实例化时它们已经是null
......或者你是否真的在春天的环境中运行它们?
您可以设置属性的XML配置如下(从documentation)为空
<bean class="ExampleBean">
<property name="email"><null/></property>
</bean>
答
- 不要使用Spring上下文和创建类手动
- 使用
ReflectionTestUtils
设置领域。ReflectionTestUtils
允许设置私人字段,其中ReflectionUtils
不允许。
回答过的问题在这里: http://stackoverflow.com/questions/3279868/how-to-turn-spring-autowired-required-property-to-false-for-test – Bastl 2013-05-03 09:40:44