Junit测试中的Springboot容器



我在与junit进行测试时无法理解几件事,我已经写了一些测试,而有些则似乎简单地与

一起使用
@RunWith(MockitoJUnitRunner.class)

@Mock

有些人似乎不适合他们,所以我必须使用

@RunWith(SpringRunner.class)

@MockBean

我知道,在处理弹簧容器时,使用@mockbean,而@mock只是用于复制/模拟某个类别及其方法。但是,使用@mockbean的最佳时机是什么?

@Test
    public void addBulkFcmLog() throws Exception {
        JacksonTester.initFields(this, new ObjectMapper());
        AdminFcmResource adminFcmResource = AdminFcmResource.builder()
                .adminId(123L)
                .build();
        given(this.fcmService.addBulkFcmLog(any(BulkFcmDataResource.class))).willReturn(adminFcmResource);
        MockHttpServletResponse response = mockMvc.perform(
                post(Routes.SEND_FCM + "/admin/logs/add")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(bulkFcmDataResourceJacksonTester.write(BulkFcmDataResource.builder().adminId(123L).build()).getJson()))
                .andExpect(status().isCreated())
                .andReturn()
                .getResponse();
        assertThat(response.getContentAsString()).isEqualTo(
                adminFcmResourceJacksonTester.write(adminFcmResource).getJson()
        );
        assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());
    }

上面是我在Spring Boot应用程序中为控制器编写的测试,但是当我使用@Mock模拟FCMService类时,响应随身带有一个空白然后测试返回正确的结果。这是怎么发生的?

在集成测试上下文中始终建议与bean一起使用(如有必要,请嘲笑)。几点要记住:

  • @MockBean照顾注入对象,您无需自己设置。
  • 如果您的配置是错误的(例如,您没有指定@Qualifier),则测试将在启动上暴露该问题。
  • 在集成测试中,您希望将系统处于尽可能接近产品的状态,而@MockBean比普通的@Mock
  • 更接近您
  • 很多时候,豆子依赖性没有setters,手动注射将很难。

相关内容

  • 没有找到相关文章

最新更新