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

当涉及到在Spring Boot测试中跨线程保持Mockito状态时,为什么@bean返回一个mock会起作用,而@mockbean却不起作用呢?

上官扬
2023-03-14

我有一个JMS Spring Boot项目,我正在尝试与我的JMS侦听器进行集成测试,并且我使用mockito mocks模拟外部服务调用的bean。

在测试期间,我遇到了一个问题,即mockito.when/thenreturn在我的JMS侦听器中返回null

@MockBean
private Service myService;

@bean定义如下

@Bean
private Service myService(){
   return Mockito.mock(Service.class);
}

当涉及到测试JMS侦听器时?请注意,spring测试将在线程[main]中,JMS侦听器将在线程[DefaultMessageListenerContainer-1]上侦听。

共有1个答案

易波涛
2023-03-14

我发现了问题所在。原来Spring MockBean在测试完成后会自动重置。在我的JMS侦听器的情况下,结果是带有测试的主线程已经完成,并且模拟已经重置。对于其他看到相同行为的人,请验证您的主测试线程尚未完成。

下面是我在mockbean.java中看到的代码

/**
     * The reset mode to apply to the mock bean. The default is {@link MockReset#AFTER}
     * meaning that mocks are automatically reset after each test method is invoked.
     * @return the reset mode
     */
    MockReset reset() default MockReset.AFTER;
 类似资料:
  • 我正在尝试使用Mockito在SprinBoot应用程序中进行一些jUnit测试。 现在我的服务有了一些变量,可以从通过注释: 我试图通过像这样使用来测试这个: 但是,该属性不会被填充,并保持为。 这方面有很多TPOIC,但我还没能拼凑出一个解决方案。我看到解决方案建议,但它似乎想做一个集成测试,使服务加速,但由于无法连接到数据库,服务失败了。所以这不是我想要的。 我还看到一些解决方案建议我制作一

  • 我试图使用反应组件在我的 在下面的例子中,它在不使用状态的情况下工作得很好 https://jsbin.com/paduyarase/edit?html输出 现在我在我的组件中引入usestate。我编译了下面的函数,使用的是javascript,但它不起作用。 此组件不工作https://jsbin.com/hefiretaru/edit?html输出 获取错误 错误:缩小的反应错误#321;参

  • 问题内容: 我有一个Flask应用程序,其会话在我的本地开发计算机上运行良好。但是,当我尝试将其部署在Amazon服务器上时,会话似乎无法正常工作。 更具体地说,未设置会话cookie。但是,我可以设置常规Cookie。我确保我有一个静态安全密钥,因为其他人指出这可能是一个问题。唯一的区别在于服务器的设置方式。在开发过程中,我使用 在本地运行。部署后,我使用 我怀疑问题可能出在上面,但还不能完全确

  • Spring文档——根据经验,所有有状态bean都应该使用原型范围,而无状态bean应该使用单例范围。 因此,当您必须跨上下文一致地维护一些状态/数据时,有状态bean是必要的。说银行应用程序。您希望您的对象在各种操作(存款、取款等)中保持同步。 因此,在单例范围内,您会得到同样的事情——跨上下文的对象一致性。 那么,为什么javadoc会声明Opposite呢? 帮助!!:)

  • 问题内容: 当我使用jdk 7运行Json测试程序时,它说: 我在项目中包含了“ javax.json-api-1.0.jar”。 这是一个简单的程序,没有使用galssfish,为什么在这里提到玻璃鱼? 问题答案: 仅包含用于编译时依赖的API。但是,如果要运行您的应用程序,则需要一个类。 是您需要的同时包含+ 类的jar 。 有关更多详细信息,请参见此线程。