spring boot restcontroller测试返回null

时间:2019-04-01 12:28:19

标签: spring-boot mockito junit5

我正在测试返回“ findById”的控制器的“ find”方法,但返回始终为空。

我的项目的结构如下:

我有一个LegalPerson实体 扩展JpaRepository

的存储库

还有一个“使用”存储库的服务。

0

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

编辑01:

3

它完美地工作。 但是如果我添加

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

返回空值。

2 个答案:

答案 0 :(得分:1)

尝试使用ArgumentMatchers

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

答案 1 :(得分: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")));
    }