模拟春天的数据存储库



我有一个扩展JPARepository<Beer,UUID>BeerRepository接口。此接口包含此方法。

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.

对此的任何帮助将不胜感激。

问题是:你不能在使用when(...)嘲笑时将 Mockito 匹配器与真实值混合。请参阅文档。

在您的情况下,以下内容应该可以正常工作:

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(...)。它也应该工作(假设它们配置正确(。

当你

模拟任何方法时,你需要为参数设置模拟类

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

相关内容

  • 没有找到相关文章

最新更新