Mockito,JUNIT-->如何在when()和verify()调用中剔除SORT.BY参数?

0x6upsns  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(70)

下面是控制器的方法

@RequestMapping("addWorkout")
public  String addWorkout(ModelMap modelmap,HttpSession session) {
    LOGGER.info("Inside addWorkout,Start");
    int userId=(int)session.getAttribute("userId");
    // modelmap.addAttribute("userId",id);

    List<Workout> workoutList = workoutRepo.findByUserId(userId,Sort.by(new Sort.Order(Direction.DESC, "date"), new Sort.Order(Direction.DESC, "startTime")));
    modelmap.addAttribute("workoutList", workoutList);
    modelmap.addAttribute("exerciseList", exerciseRepo.findAll());
    LOGGER.info("Inside addWorkout,end");
    return "AddWorkout";
}

当调用下面的代码行时,我如何编写?它可以是SORT参数workoutRepo.findByUserId(userId,Sort.by(new Sort.Order(Direction.DESC, "date"), new Sort.Order(Direction.DESC, "startTime")));任何简单类型的匹配
下面是我为上述控制器方法编写的测试方法

@Test
void addWorkoutTest() {
    int userId = 1;

    List<Workout> mockWorkoutList = new ArrayList<>();
    List<Exercise> mockExerciseList = new ArrayList<>();
    when(exerciseRepo.findAll()).thenReturn(mockExerciseList);
    when(session.getAttribute("userId")).thenReturn(userId);
    String result = workoutController.addWorkout(modelMap, session);
    verify(exerciseRepo, times(1)).findAll();
    verify(session, times(1)).getAttribute("userId");
    verify(modelMap, times(1)).addAttribute("workoutList", mockWorkoutList);
    verify(modelMap, times(1)).addAttribute("exerciseList", mockExerciseList);
    assertNotNull(result);
}`

我不确定如何处理SORT参数部分。寻找在when()调用中处理SORT参数的不同方法。任何示例都将帮助我学习
when(workoutRepo.findByUserId(anyInt(), ) ).thenReturn(mockWorkoutList);

6ie5vjzr

6ie5vjzr1#

userId是一个int类型,Sort覆盖了boolean equals(Object),所以你可以直接匹配精确的参数:

when(workoutRepo.findByUserId(userId, Sort.by(new Sort.Order(Direction.DESC, "date"), new Sort.Order(Direction.DESC, "startTime"))))
    .thenReturn(List.of(…));

您也可以使用eq匹配器(Matchers.eq):

when(workoutRepo.findByUserId(eq(userId), eq(Sort.by(new Sort.Order(Direction.DESC, "date"), new Sort.Order(Direction.DESC, "startTime")))))
    .thenReturn(List.of(…));

或者如果你不关心实际值的话,用any()匹配:

when(workoutRepo.findByUserId(eq(userId), any()))
    .thenReturn(List.of(…));

相关问题