我有一个扩展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);