[英]SpringBoot Container in Junit Test
在使用 JUnit 进行测试时,我无法理解一些事情,我已经编写了一些测试,而有些似乎只是与
@RunWith(MockitoJUnitRunner.class)
和
@Mock
有些似乎不适合他们,所以我必须使用
@RunWith(SpringRunner.class)
和
@MockBean
我知道@MockBean 是在处理 Spring Container 时使用的,而 @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 类时,响应带有一个空主体,但随后我将其更改为 @MockBean 并自动连接控制器类,然后测试返回正确的结果。 这怎么发生的?
在集成测试上下文中,始终建议使用 bean(必要时模拟)。 要记住的几点:
@MockBean
负责注入对象,您不需要自己设置它。@Qualifier
),则测试将在启动时暴露该问题。@MockBean
使您比普通的@Mock
更接近setters
,手动注入会很困难。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.