【发布时间】:2020-07-20 12:23:42
【问题描述】:
我正在为 Spring Boot 中的 Rest Controller 编写测试用例。
为了提供有关该问题的一些背景信息,我无法模拟从控制器层的服务中抛出的异常。
我正在使用 PowerMokito 编写测试用例。
@RunWith(PowerMockRunner.class)
@PrepareForTest(UserApiController.class)
public class UserApiControllerTest {
/* private MockMvc mockMvc;*/
@Mock
GenericService genericService;
@Mock
UserService userService;
@Mock
UserRoleService userRoleService;
@Mock
MessageService messageService;
@Mock
CurrentUserService currentUserService;
@Mock
UserRepository userRepository;
@Mock
UserRoleRepository userRoleRepository;
@InjectMocks
UserApiController userApiController;
@Before
public void setup() {
// this must be called for the @Mock annotations above to be processed
MockitoAnnotations.initMocks(this);
//Set up mocking for repository methods
}
@Test(expected = DuplicateUserEmailException.class)
public void saveUserByEmailFailure() throws Exception {
HashMap mockUser = new HashMap<String,Object>();
mockUser.put("email","test_dy1@gmail.com");
String user = new ObjectMapper().writeValueAsString(mockUser);
doThrow(new DuplicateUserEmailException()).
when(userService).saveUserByEmailId(any());
userApiController.saveUserByEmailId(user);
}
请在下面找到控制器的详细信息。
@RequestMapping(value = "/save_user_by_email", method = RequestMethod.POST)
public String saveUserByEmailId(@RequestParam("user") String user) throws Exception {
ObjectMapper mapper = new ObjectMapper();
HashMap<String, Object> userJson = new HashMap<String, Object>();
userJson = mapper.readValue(user, new TypeReference<Map<String, Object>>(){});
JsonObjectBuilder responseBuilder = Json.createObjectBuilder();
try {
userService.saveUserByEmailId(userJson);
responseBuilder.add("success", true).add("code", genericService.getSuccessCode()).add("message",
userJson.containsKey("id") ? messageService.getMessage("message.success.update")
: messageService.getMessage("message.success.create"));
} catch (Exception exception) {
LOGGER.error(exception.getMessage(), exception);
if(exception instanceof DuplicateUserEmailException)
throw new DuplicateUserEmailException();
}
return responseBuilder.build().toString();
}
【问题讨论】:
-
@N.K.SunilSunilnk 你能分享一下 UserApiController 的代码吗?
-
@Lemmy 请在上面找到控制器详细信息
-
我刚刚复制/粘贴了您的代码,一切正常。你能分享你的堆栈跟踪和整个测试类(连同导入部分
-
@InjectMocks ApiExceptionHandlerAdvice apiExceptionHandlerAdvice;
-
这部分很重要。
标签: java spring-boot spring-mvc spring-restcontroller