APIを使用してWebアプリケーションのテストを作成し、コントローラメソッドをテストします。コントローラは、私が嘲笑したいサービスメソッドを使います。 テストコード:メソッドを使用してモックを使用する場合
UserService.save(ユーザ)がNULLであった場合、それはいくつかのユニークなロング値にユーザのIDプロパティを設定呼ば@Mock
private UserService userService;
@Mock
private PasswordEncoder passwordEncoder;
@InjectMocks
private UserApi userApi;
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(userApi).build();
@Test
public void addUser() throws Exception {
Role role = new Role(1L, "ROLE_USER");
User user = new User (null, "Test user", "Test password", true, role);
when(roleService.findByName(role.getName())).thenReturn(role);
when(passwordEncoder.encode(user.getPassword())).thenReturn("Encoded password");
when(userService.save(user)).thenReturn(1L);
mockMvc.perform(MockMvcRequestBuilders.post("/user").content(user.toJson())).andDo(print())
.andExpect(status().isOk())
.andExpect(content().contentType("application/json"))
.andExpect(content().string(user.toJson()));
}
。私はUserService.save(user)のMockを実際のsave()と同じように、保存されたユーザのidを変更するように設定できますか? PasswordEncoderと同じですが、PasswordEncoder.encode(string)を呼び出すと、文字列の値がエンコードされた値に変更されます。
ありがとう、ええと、私は完全性テストが好きです:) – zzheads
ユーザーのidプロパティがsaveメソッド(mock)コントローラで呼び出されます。 "Real" save()はまったく違ったやり方で、user.idを "模擬"バージョンに設定できるものを見つけることはできません... – zzheads