Хранилище данных Mocking Spring - PullRequest
0 голосов
/ 25 марта 2019

У меня есть BeerRepository интерфейс, который расширяет JPARepository<Beer,UUID>.Этот интерфейс содержит этот метод.

Page<Beer> findAllByBeerName(String beerName, Pageable pageable);

В методе обработчика контроллера у меня есть это.

  Page<Beer> pagedResult = beerRepository.findAllByBeerName(beer.getBeerName(), 
    createPageRequest(0,10,Sort.Direction.DESC,"beerName"));

Я пытаюсь выполнить модульное тестирование метода обработчика контроллера.

Это метод @BeforeEach.

    . . .
    Page<Beer> pagedResponse;
    @BeforeEach
    void setUp() {
    beerList = new ArrayList<Beer>();
    beerList.add(Beer.builder().build());
    beerList.add(Beer.builder().build());
    pagedResponse = new PageImpl(beerList);
    mockMvc = MockMvcBuilders
            .standaloneSetup(controller)
            .build();
}

Мой метод @Test такой.

@Test
void processFindFormReturnMany() throws Exception{

    when(beerRepository.findAllByBeerName(anyString(), PageRequest.of(0,
          10,Sort.Direction.DESC,"beerName"))).thenReturn(pagedResponse);
    mockMvc.perform(get("/beers"))
            .andExpect(status().isOk())
            .andExpect(view().name("beers/beerList"))
            .andExpect(model().attribute("selections", hasSize(2)));
}

При выполнении теста я получаю

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
2 matchers expected, 1 recorded:
-> at 
guru.sfg.brewery.web.controllers.BeerControllerTest.
processFindFormReturnMany
(BeerControllerTest.java:67)

This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
 When using matchers, all arguments have to be provided by matchers.

Любая помощь по этому вопросу будет высоко оценен.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Вам нужно установить фиктивный класс для параметра, когда вы имитируете любой метод

when(beerRepository.findAllByBeerName(anyString(), any(Pageable.class)).thenReturn(pagedResponse);
0 голосов
/ 25 марта 2019

Проблема заключается в том, что вы не можете смешивать сопоставители Mockito с реальными значениями, в то время как насмешливые с when(...).См. документы .

В вашем случае следующее должно работать правильно:

when(beerRepository.findAllByBeerName(anyString(), eq(PageRequest.of(0,
          10,Sort.Direction.DESC,"beerName")))).thenReturn(pagedResponse);

или

when(beerRepository.findAllByBeerName(anyString(), any(PageRequest.class)).thenReturn(pagedResponse);

Наконец, вы можете использовать реальныйожидаемая строка вместо anyString() и оставьте PageRequest.of(...) как есть.Это должно работать тоже (при условии, что они были настроены правильно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...