Spring boot spring引导控制器测试返回null

Spring boot spring引导控制器测试返回null,spring-boot,mockito,junit5,Spring Boot,Mockito,Junit5,我正在测试控件的“find”方法,该方法返回一个“findById”,但返回值总是空的 我的项目结构如下: 我有一个法人实体 扩展JPA存储库的存储库 以及“使用”存储库的服务 @SpringBootTest @AutoConfigureMockMvc @ExtendWith(SpringExtension.class) class LegalPersonResourceTest { @MockBean private LegalPersonService service;

我正在测试控件的“find”方法,该方法返回一个“findById”,但返回值总是空的

我的项目结构如下:

我有一个法人实体 扩展JPA存储库的存储库

以及“使用”存储库的服务

@SpringBootTest
@AutoConfigureMockMvc
@ExtendWith(SpringExtension.class)
class LegalPersonResourceTest {

    @MockBean
    private LegalPersonService service;

    @Autowired
    private MockMvc mvc;

    @Test
    void find() {
        var localDate = LocalDate.of(1955, 10, 25);
        List<Long> subsidiaries = new ArrayList<>() {{
            add(10L);
            add(20L);
        }};
        List<Long> phones = new ArrayList<>() {{
            add(50L);
            add(60L);
        }};
        var mockLP = LegalPerson.builder()
                .id(1L)
                .active(true)
                .companyId(1L)
                .tradeName("Test Company Trade Name")
                .companyName("Test Company Company Name")
                .email("test@com")
                .cnpj("testCNPJ")
                .stateRegistration("test state Registration")
                .municipalRegistration("test Municipal Resgistration")
                .openingDate(localDate)
                .address(1L)
                .companyType(CompanyEnum.HEADOFFICE)
                .subsidiaries(subsidiaries)
                .phones(phones)
                .build();

        Mockito.doReturn(mockLP).when(service).find(1L);
    }
}
它工作得很好。 但如果我加上

.andExpect(MockMvcResultMatchers.header().string(HttpHeaders.ETAG, "\"1\""))

返回null。

尝试使用
参数匹配器

Mockito.when(this.service.find(ArgumentMatchers.eq(1L)).thenReturn(mockLP);

尝试使用
ArgumentMatchers

Mockito.when(this.service.find(ArgumentMatchers.eq(1L)).thenReturn(mockLP);

您只是在模拟服务,但没有测试此代码中的任何内容,您可能需要测试控制器,如下所示:

import static org.mockito.BDDMockito.given;

    @Test
    public void shouldGetAPerson() throws Exception {
        //...
        given(service.find(1L)).willReturn(mockLP);
        mvc.perform(MockMvcRequestBuilders.get("/person/1")
                .contentType("application/json"))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.id", Matchers.containsString("1")));
    }

您只是在模拟服务,但没有测试此代码中的任何内容,您可能需要测试控制器,如下所示:

import static org.mockito.BDDMockito.given;

    @Test
    public void shouldGetAPerson() throws Exception {
        //...
        given(service.find(1L)).willReturn(mockLP);
        mvc.perform(MockMvcRequestBuilders.get("/person/1")
                .contentType("application/json"))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.id", Matchers.containsString("1")));
    }

你没有在测试任何东西。至少在这里发布的代码中没有。您只是在进行测试设置,没有进行任何测试。至少在这里发布的代码中没有。您只是在进行测试设置。