私は自分のコントローラからテストを作成し、リダイレクトURLを "/ register/duplicate"に返さなければなりません。しかし、私がそれを実行すると、DataIntegrityViolationExceptionのような例外が発生します。コントローラーはこの例外をキャッチする必要がありますが、キャッチしませんMockitoと例外が予想される
どのように動作しますか?そして、私は、例外が発生し、「キャッチ」の原因でコードを実行しているコントローラに、/登録してリダイレクトされます何ができるか/複製
テスト:
@Test
public void testRegisterPageLogic_Duplicate() throws Exception {
expectedUser = new User("Jorg", "Brush");
UserService mockService = mock(UserService.class);
userService.add(expectedUser);
when(mockService.add(expectedUser)).thenCallRealMethod();
registerController = new RegisterController(mockService);
mockMvc = standaloneSetup(registerController).build();
mockMvc.perform(post("/register")
.param("hide", "up")
.param("username", expectedUser.getUsername())
.param("password", expectedUser.getPassword()))
.andExpect(redirectedUrl("/register/duplicate"));
Mockito.verify(mockService, atLeastOnce()).add(expectedUser);
userService.remove(userService.findUser("Jorg").getUserId());
}
コントローラ方法:
@RequestMapping(method = POST)
public String register(@RequestParam("hide") String hide,
@RequestParam("username") String username,
@RequestParam("password") String password) {
if (hide.equals("up")) {
try {
userService.add(new User(username, password));
} catch (DataIntegrityViolationException e) {
return "redirect:/register/duplicate";
}
}
User user = userService.findUser(username);
if (user == null) {
return "redirect:/register/notExists";
}
UserSession.setUser(user);
UserSession.setId(user.getUserId());
return "redirect:/notes/" + UserSession.getUser().getUsername();
}
その後、両方枝を、テストしたいですあなたの質問を2回、そして申し訳ありませんが、私はあなたが欲しいものを理解していません –
いくつかのモックを例外をスローするようにmockitoを使用する方法を求めているのですか? –
でも私はその質問を得ることができませんでした。 –