【发布时间】:2018-03-20 13:09:18
【问题描述】:
我有一个创建原型 bean 的单例 Spring bean;这些是从javax.inject.Provider 字段中检索到的:
@Component
public class MySingleton {
@Autowired
private javax.inject.Provider<MyPrototype> prototypeFactory;
public void doStuff() {
MyPrototype bean = prototypeFactory.get();
bean.invoke();
}
}
@Component
@Scope("prototype")
public class MyPrototype {
public void invoke() {}
}
现在我想为 Singleton 创建一个 JUnit-Test:
@Mock
MyPrototype prototype;
@InjectMocks
MySingleton sut;
@Test
public void testPrototype() {
sut.doStuff();
verify(prototype, times(1)).invoke();
}
但是可以理解的是,这并没有正确设置 Singleton 的 Provider。
有没有办法做到这一点?我想避免创建一个创建 Prototype 实例的 Singleton Factory bean。
或者,是否可以优雅地为 Singleton 使用 @Lookup-factory 方法?我还没有研究过。
【问题讨论】:
标签: java spring unit-testing junit mockito