spring 启动 restcontroller 测试 returns 空

spring boot restcontroller test returns null

我正在测试 return 是 "findById" 的控制器的 "find" 方法,但 return 始终为空。

我的项目结构如下:

我有一个 LegalPerson 实体 扩展 JpaRepository

的存储库

以及 "uses" 存储库的服务。

@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);
    }
}

我想知道我忘记了什么,或者写错了。

已编辑 01:

Mockito.when(this.service.find(ArgumentMatchers.eq(1L))).thenReturn(mockLP);
        mvc.perform(MockMvcRequestBuilders.get("/api/clients/lp/{id}", 1L))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().contentType("application/json;charset=UTF-8"))
                .andExpect(MockMvcResultMatchers.jsonPath("$.active", Matchers.is(true)));

效果很好。 但是如果我添加

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

return 空。

试试 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")));
    }