тест restcontroller при весенней загрузке возвращает ноль - PullRequest
0 голосов
/ 01 апреля 2019

Я тестирую метод "find" контроллера, который возвращает "findById", но возвращаемое значение всегда равно нулю.

Мой проект структурирован следующим образом:

У меня есть юридическое лицо Репозиторий, расширяющий JpaRepository

И служба, которая «использует» хранилище.

@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\""))

вернуть ноль.

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Вы только издеваетесь над сервисом, но в этом коде ничего не тестируете, возможно, вы захотите протестировать контроллер, что-то вроде этого:

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")));
    }
1 голос
/ 01 апреля 2019

Попробуйте с ArgumentMatchers

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