我正在编写单元测试并且设置非常复杂。
依赖bean设置一些侦听器并将它们传递给自动服务。
我想测试听众是否存在,但是没有调用它们,所以我想传递'null'而不是自动服务。 (具体来说:我没有制定者......)
@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)添加setter?
B)ReflectionUtils?
C)java-config + @Beans + return null?
答案 0 :(得分:1)
在实例化类时,它们已经是null
...或者您是否真的在弹簧上下文中运行它们?
您可以在xml配置中将属性设置为null,如下所示(来自documentation)
<bean class="ExampleBean">
<property name="email"><null/></property>
</bean>
答案 1 :(得分:1)
ReflectionTestUtils
设置字段。 ReflectionTestUtils
允许设置ReflectionUtils
没有的私有字段。