如何将"nulls"注入自动接线的春豆中?



我正在编写单元测试,并且有一个相当复杂的设置。

依赖bean设置一些侦听器并将自动连接的服务传递给它们。

我想测试侦听器是否存在,但不调用它们,所以我想传递'null'而不是autowired服务。(具体来说:我没有setter…)

@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确实间接依赖于返回侦听器的类。

由于这是一个来自大设置的非常小的示例,因此我特别使用不希望在这里使用mock ,因为我只想测试侦听器的存在而不是行为。

模拟20或30个这样的服务将大大降低测试速度。

问题:将这些空值注入autowired实例变量中最简单的方法是什么?

A)添加设置?

B) ReflectionUtils ?
java-config + @Beans + return null ?

当类实例化时,它们已经是null了…还是在spring上下文中运行它们?

你可以像这样在xml配置中设置属性为null(来自文档)

<bean class="ExampleBean">
    <property name="email"><null/></property>
</bean>
    不要使用Spring上下文并手动创建类
  1. 使用ReflectionTestUtils设置该字段。ReflectionTestUtils允许设置私有字段,ReflectionUtils不允许。

相关内容

  • 没有找到相关文章

最新更新