Я работаю с поддельным объектом, подобным следующему:
@Mock
private RecipeService recipeService
У меня также есть следующий метод внутри класса тестирования:
@Test
public void testAddRecipeWithNonUniqueName() throws Exception {
Recipe recipe = new Recipe();
doThrow(Exception.class)
.when(recipeService)
.save(recipe);
mockMvc.perform(post("/recipes/add-recipe")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("id", "1")
.param("name", "recipe1"))
.andExpect(status().is3xxRedirection())
.andExpect(view().name("redirect:/recipes/add"));
}
Как видите, яиспользование метода doThrow
mockito для определения того, какое исключение будет вызвано при вызове метода void
с именем save
.
Я хочу сделать запрос POST, используя объект MockMvc
.Поэтому метод, помеченный конечной точкой /recipes/add-recipe
, будет вызываться внутри одного из моих классов контроллеров.Следующий фрагмент кода показывает этот метод подробно:
@RequestMapping(value = "/recipes/add-recipe", method = RequestMethod.POST)
public String addRecipe(@Valid Recipe recipe, BindingResult result, RedirectAttributes redirectAttributes,
@AuthenticationPrincipal User user){
String response = validateFormValues(recipe, redirectAttributes, result,
"redirect:/recipes/add");
if(!response.isEmpty())return response;
recipe.setUser(user);
try {
recipeService.save(recipe);
}catch(Exception e){
redirectAttributes.addFlashAttribute("uniqueConstraintError",
String.format("The name \"%s\" is already taken by another recipe. " +
"Please try again!",
recipe.getName()));
return "redirect:/recipes/add";
}
setUserForIngredientsAndSteps(recipe);
redirectAttributes.addFlashAttribute("flash",
new FlashMessage("The recipe has been added successfully!", FlashMessage.Status.SUCCESS));
return String.format("redirect:/recipes/%s/detail", recipe.getId());
}
Вышеуказанный метод содержит блок try-catch .Когда вызывается recipeService.save()
, я ожидаю, что будет сгенерировано исключение, которое будет обработано блоком catch. Но этого не происходит. Вместо этого выполняются другие строки.
Чего мне не хватает?