当前位置: 首页 > 知识库问答 >
问题:

如何在Mockito中注入原型bean

敖硕
2023-03-14

我使用injectmocksspy注释来注入一个原型bean。

然而,注入bean的行为类似于单例bean。有没有办法在mockito中注入一个原型范围bean?

我正在使用SpringJUnit4ClassRunner运行JUnit,并使用mockitoannotations.initmocks(this)运行初始化模拟。

共有1个答案

宗鸿博
2023-03-14

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

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

ctx.getBean("Foo");

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

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

如果您像下面这样设置测试,那么无论您的代码调用ctx.getBean()多少次,都会返回相同的Foo实例:

Foo foo = new Foo();
decorateFoo(foo);
when(ctx.getBean("Foo")).thenReturn(foo);

这就是如何在测试中实现类似原型的行为:

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
    }
}
 类似资料:
  • 我有一个用于原型bean的FactoryBean,如下所示: 我希望在控制器中自动连接它,并且每当我尝试访问属性时(通过,从获得一个新的原型实例: 但是,这从来不会调用getObject()。如果我注入ApplicationContext一个直接访问bean,它就会工作,提供一个全新的属性bean: 如何直接使用@autowired注入来实现?

  • 我正在使用Spring3中的查找方法注入将原型bean注入到单例bean中,如这里的Spring文档中所述。在我的原型bean中,我对ApplicationContext.xml中声明的另一个bean有依赖关系。查找方法注入似乎工作正常,因为我的原型bean被注入到我的单例bean中,然而,原型的依赖项根本没有被注入。当通过查找方法返回原型时,依赖关系是否可以以正常的方式注入到原型bean中?如果

  • 我正在使用 Spring 3.1.1,在我的业务逻辑中,我有一个循环,每次迭代都需要一个新的 Spring bean(原型范围)实例。 最好的方法是什么?我是否必须创建自己的 BeanFactory 类,我可以将其注入一次到我的类中,并且每次都调用它来生成 bean?在查看 Spring 3 文档时,它似乎暗示我应该改用 ApplicationContext。但是,使用ApplicationCon

  • Spring在这里需要一些帮助。在我们的项目中,我们使用XML和注释配置(Spring 4.1) 最近我遇到了以下任务: 我有一个范围原型的bean列表,它们都实现了相同的接口。 此外,我有一个单独的bean,它有< code>execute方法。在方法内部,bean应该访问这些原型bean的列表。 每次执行“execute”方法时,我都想访问这些原型bean的不同实例)。在singleton中,

  • 我有一个单例春豆,可以创建原型豆;这些是从字段中检索的: 现在我想为单例创建一个JUnit-Test: 但是可以理解的是,这并没有正确设置单例的< code>Provider。 有什么办法吗?我希望避免创建创建原型实例的Singleton Factory bean。 或者,对单例使用一个< code>@Lookup-factory方法是否很有可能?我还没有研究过这个。

  • 我对摩基托并不陌生,但这次我在工作中发现了一个有趣的案例。我希望你能帮我解决这件事。 我需要注入mock来改变测试过程中的某些方法行为。问题是,bean结构是嵌套的,并且这个bean在其他bean内部,不能从test方法访问。我的代码如下所示: 所以在我的测试中,我希望调用nestedDAO.method返回模拟答案。 我尝试执行一个initmocks: 还要在我的测试类上添加注释: 总是从方法获