模拟Spring数据存储库

时间:2019-03-25 03:13:18

标签: junit spring-data mockito

我有一个扩展{ "manifest_version" : 3, "name" : "Play", "description" : "Play", "version": "2", "browser_action" : { "default_title" : "Play-Pause", "default_popup" : "popup.html" }, "permissions" : [ "activeTab", "tabs", "background" ], "content_scripts": [{ "matches": ["http://*/*"], "js": [ "content.js" ] }], "background" : { "scripts": ["background.js"], "persistent": false } } 的{​​{1}}接口。此接口包含此方法。

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"));

我的@Test方法是这个。

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

对此将提供任何帮助。

2 个答案:

答案 0 :(得分:0)

问题是:用when(...)模拟时,不能将Mockito匹配器与实际值混合。参见docs

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

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

答案 1 :(得分:0)

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

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