Как проверить Java Predicate из контроллера Spring? - PullRequest
0 голосов
/ 28 января 2019

Есть ли допустимый вариант для тестирования контроллера с 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);

Есть ли варианты сделать это?

1 Ответ

0 голосов
/ 28 января 2019

Я считаю, что это будет делать то, что вы хотите:

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

Некоторые предостережения:

  1. Я предпочитаю форму doReturn(value).when(mock).method при указании фиктивной функциональности, но это достаточно простодля перехода на форму when(mock.method).thenReturn(value).
  2. anyObject устарела в последней версии Mockito.Он все еще присутствует, но устарел.

Редактировать: Я прочитал документацию Mockito версии 2.23 и упоминает, что anyObject является просто псевдонимом для any method.

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

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