簡體   English   中英

如何從Spring控制器測試Java謂詞?

[英]How to test Java Predicate from Spring controller?

predicate測試控制器是否有任何有效的變體?

@RestController
public class QueryLauncherController {
    private QueryLauncherService queryLauncherService;

    @Autowired
    public QueryLauncherController(QueryLauncherService queryLauncherService) {
        this.queryLauncherService = queryLauncherService;
    }

    @GetMapping("/queryLauncher/CMP")
    public List<QueryLauncherDto> getLaunchersCompany(RTAdmin admin) {
        return queryLauncherService.getLaunchersList(admin, QueryLauncher::getIsCompany);
    }
}

我嘗試使用any(Predicate.class)解決此問題,但IDE突出顯示為“未經檢查的分配”,並且看起來很愚蠢。 我為測試編寫的代碼是:

    public void returnCompanyLinks_When_companyRequested() throws Exception {
        when(queryLauncherService.getLaunchersList(eq(user), any(Predicate.class))).thenReturn(queryLauncherDtos);

        mockMvc.perform(get(QUERY_LAUNCHER_URL + CMP).session(mockSession))
                .andExpect(status().isOk())
                .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(content().json(new Gson().toJson(queryLauncherDtos)));
    }

目標是僅在QueryLauncher::getIsInvestor時運行方法。

List<QueryLauncherDto> getLaunchersList(RTAdmin admin, Predicate<QueryLauncher> launcherType);

有任何變體嗎?

我相信這將滿足您的要求:

doReturn(queryLauncherDtos).when(queryLauncherService).getLaunchersList(eq(user),
  ArgumentMatchers.<Predicate<QueryLauncher>>anyObject());

一些警告:

  1. 在指定doReturn(value).when(mock).method功能時,我更喜歡使用doReturn(value).when(mock).method形式,但是翻轉到when(mock.method).thenReturn(value)形式很容易。
  2. 在最新版本的Mockito中不推薦使用anyObject。 它仍然存在,但已棄用。

編輯:我閱讀了2.23版本的Mockito文檔,其中提到anyObject只是any方法的別名。

以下應該起作用,並且不建議過時:

doReturn(queryLauncherDtos).when(queryLauncherService).
  getLaunchersList(eq(user),
  ArgumentMatchers.<Predicate<QueryLauncher>>any());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM