dan*_*niu 5 java junit spring unit-testing mockito
我有一个单例Spring bean,它创建原型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() {}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想为Singleton创建一个JUnit-Test:
@Mock
MyPrototype prototype;
@InjectMocks
MySingleton sut;
@Test
public void testPrototype() {
sut.doStuff();
verify(prototype, times(1)).invoke();
}
Run Code Online (Sandbox Code Playgroud)
但这可以理解为无法正确设置Singleton's Provider。
有什么办法吗?我想避免创建创建Prototype实例的Singleton Factory bean。
或者,使用@LookupSingleton 的-factory方法可能很优雅吗?我还没有研究过。
我会对它Provider进行存根处理,并prototypeMock使用@Before每次测试之前调用的方法使它每次返回:
@Mock
private javax.inject.Provider<MyPrototype> prototypeFactoryStub;
@Mock
MyPrototype prototypeMock;
@InjectMocks
MySingleton sut;
@Before
public void init(){
MockitoAnnotations.initMocks(this); // optional
when(prototypeFactoryStub.get()).thenReturn(prototypeMock);
}
@Test
public void testPrototype() {
sut.doStuff();
verify(prototypeMock, times(1)).invoke();
}
Run Code Online (Sandbox Code Playgroud)
如果您需要进一步阅读,我已经写了一篇有关Mockito Stubbing的文章。
| 归档时间: |
|
| 查看次数: |
2835 次 |
| 最近记录: |