0

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

依赖 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)添加二传手?

B)反射工具?

C) java-config + @Beans + 返回 null ?

4

2 回答 2

1

They're already null when the class is instantiated ... or are you actually running them in a spring context?

You can set properties to null in the xml config like this (from the documentation)

<bean class="ExampleBean">
    <property name="email"><null/></property>
</bean>
于 2013-05-03T08:28:00.573 回答
1
  1. 不要使用 Spring 上下文并手动创建类
  2. 用于ReflectionTestUtils设置字段。ReflectionTestUtils允许在不允许的情况下设置私有字段ReflectionUtils
于 2013-05-03T11:15:14.787 回答