我正在使用InjectMocks和Spy注解来注入原型bean。
但是,注入bean的行为类似于单例bean。有什么方法可以在Mockito中注入原型作用域的bean?
我正在运行JUnit SpringJUnit4ClassRunner并使用进行了模拟MockitoAnnotations.initMocks(this)。
小智 4
这是因为 Mockito 在编译时创建注入的对象。如果您想要类似原型的行为,则需要改用答案。
例如,假设您的 Spring 应用程序有一个名为 Foo 的原型 bean,并且您的代码多次执行类似的操作:
ctx.getBean("Foo");
Run Code Online (Sandbox Code Playgroud)
由于 Foo 是一个原型,每次调用 getBean() 时,Spring 都会返回一个新的 Foo 实例。
现在,在您的 Mockito 测试中,您模拟了 ctx 来欺骗 getBean() 并返回您自己的预先配置的 Foo 实例。
如果您像下面这样设置测试,无论您的代码调用 ctx.getBean() 多少次,都将返回相同的 Foo 实例:
Foo foo = new Foo();
decorateFoo(foo);
when(ctx.getBean("Foo")).thenReturn(foo);
Run Code Online (Sandbox Code Playgroud)
这是在测试中实现类似原型行为的方法:
when(ctx.getBean("Foo")).then(new FooAnswer());
private class FooAnswer implements Answer<Foo> {
@Override
public Foo answer(InvocationOnMock invocationOnMock) throws Throwable {
return new Foo(); // and configure as needed
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |