gpt4 book ai didi

spring - 如何在 Mockito 中注入(inject) Prototype bean

转载 作者:行者123 更新时间:2023-12-04 19:30:10 27 4
gpt4 key购买 nike

我正在使用 InjectMocksSpy用于注入(inject)原型(prototype) bean 的注解。

然而,注入(inject) bean 的行为类似于单例 bean。有什么方法可以在 Mockito 中注入(inject)原型(prototype)作用域 bean?

我正在使用 SpringJUnit4ClassRunner 运行 JUnit并使用 MockitoAnnotations.initMocks(this) 初始化模拟.

最佳答案

那是因为 Mockito 在编译时创建了你的注入(inject)对象。
如果你想要一个类似原型(prototype)的行为,你需要切换到使用答案。

例如,假设您的 Spring 应用程序有一个名为 Foo 的原型(prototype) bean,并且您的代码多次执行以下操作:

ctx.getBean("Foo");

由于 Foo 是一个原型(prototype),因此每次调用 getBean() 时,Spring 都会返回一个新的 Foo 实例。

现在,在您的 Mockito 测试中,您模拟了 ctx 以欺骗 getBean() 并返回您自己预配置的 Foo 实例。

如果你像下面这样设置你的测试,无论你的代码调用多少次 ctx.getBean(),都会返回相同的 Foo 实例:
Foo foo = new Foo();
decorateFoo(foo);
when(ctx.getBean("Foo")).thenReturn(foo);

这就是如何在测试中实现类似原型(prototype)的行为:
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
}
}

关于spring - 如何在 Mockito 中注入(inject) Prototype bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44182856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com