如何将“nulls”注入自动装配的spring bean?

时间:2013-05-03 08:23:28

标签: spring junit mockito

我正在编写单元测试并且设置非常复杂。

依赖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?

2 个答案:

答案 0 :(得分:1)

在实例化类时,它们已经是null ...或者您是否真的在弹簧上下文中运行它们?

您可以在xml配置中将属性设置为null,如下所示(来自documentation

<bean class="ExampleBean">
    <property name="email"><null/></property>
</bean>

答案 1 :(得分:1)

  1. 不要使用Spring上下文并手动创建类
  2. 使用ReflectionTestUtils设置字段。 ReflectionTestUtils允许设置ReflectionUtils没有的私有字段。