java - 如何用 mockito 抛出 JsonProcessingException
问题描述
我的代码中有这行:
@Autowired
private ObjectMapper mapper = new ObjectMapper();
@PostMapping("/postPrueba")
public ResponseEntity<String> postPrueba(@RequestBody Prueba prueba) {
String pTest = null;
try {
pTest = mapper.writeValueAsString(prueba);
System.out.println(pTest );
} catch (JsonProcessingException e) {
return new ResponseEntity<>("", HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity<>("", HttpStatus.OK);
}
我的模型Prueba.java
public class Prueba {
@Id
private String nombre;
private String apellidos;
private String edad;
}
在测试中我想强制 JsonProcessingException 但我不能。我已经尝试过这个:
@Mock
private ObjectMapper mapperMock;
@Test
public void testKo() throws Exception {
ObjectMapper om = Mockito.spy(new ObjectMapper());
Mockito.when(this.mapperMock.writeValueAsString(Mockito.any())).thenThrow(new JsonProcessingException("") {});
ObjectMapper om = Mockito.spy(new ObjectMapper());
Mockito.when( om.writeValueAsString(Mockito.eq(Prueba.class))).thenThrow(new JsonProcessingException("") {});
Mockito.when(this.mapperMock.writeValueAsString(Mockito.eq(Prueba.class))).thenThrow(new JsonProcessingException("") {});
String jsonContent = "{'nombre': '123456', 'apellidos': '12'}";
jsonContent = jsonContent.replaceAll("\'", "\"");
this.mvc.perform(post("/postPrueba")
.contentType(MediaType.APPLICATION_JSON)
.content(jsonContent))
.andExpect(status().is5xxServerError());
}
但总是响应是 200 OK。我怎样才能做到这一点?
解决方案
您需要在 spring 上下文中替换 Bean。
我假设您将 Spring Boot 与 @RunWith(SpringRunner.class) 和 @WebMVCTest 一起使用?
然后你可以使用@MockBean
另见:https ://www.baeldung.com/java-spring-mockito-mock-mockbean
推荐阅读
- wso2is - API Store - 错误无法执行应用程序创建工作流程
- python - cx_Oracle 不适用于 Oracle 数据库 10gR2
- c# - 在 WPF 应用程序运行时添加资源管理器上下文菜单
- batch-file - 批处理文件 - 使用 sqlcmd 拒绝获取错误访问
- javascript - SyntaxError:意外的令牌(
- visual-c++ - 我应该链接哪个库以使用 DirectX Media Object Wrapper Filter?
- javascript - 同时更改不同页面上的多个 id
- java - Maven 发布插件 - 带有 git 子模块的多项目
- r - 如何根据条件为ggplot中的线条着色?
- php - 带有左连接的 MYSQL 查询