Mockito ::传递对象时JsonProcessingException的单元测试用例
Mockito:: Unit test case for JsonProcessingException when passing object
我有一个class如下图:
@Getter
@Setter
public class User{
@Autowired
Logger log;
private String name;
private String age;
public String toJson(){
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = null;
try{
jsonString = objectMapper.writeValueAsString(this);
}catch(JsonProcessingException jsnEx){
log.writeErr(" Error while parsing the Json" + jsnEx.getMessage());
}
return jsonString;
}
}
现在我正在尝试为此编写一个 单元测试 案例,我可以抛出异常并使用 Mockito 对 catch 子句进行单元测试,但我无法模拟它。我注意到对象映射器 class 在内部将所有内容转换为字符串,即使我将 name 和 age 设置为 null。谁能帮我解决这个问题?
在 Spring 中使用构造函数注入。这将允许您在 class 中注入模拟的 ObjectMapper,然后您可以在测试中设置行为。见下文。
@Getter
@Setter
public class User{
private String name;
private String age;
private final Logger log;
private final ObjectMapper objectMapper;
public User(Logger log, ObjectMapper objectMapper){
this.log = log;
this.objectMapper = objectMapper;
}
public String toJson(){
String jsonString = null;
try{
jsonString = objectMapper.writeValueAsString(this);
}catch(JsonProcessingException jsnEx){
log.writeErr(" Error while parsing the Json" + jsnEx.getMessage());
}
return jsonString;
}
}
// Test
@Before
public setup(){
@Mock
Logger log;
@Mock
ObjectMapper objectMapper;
testObject = new User(log, objectMapper);
}
@Test
public test_toJson(){
// given
when(objectMapper.writeValueAsString(any())).thenThrow(new JsonProcessingException("Fake exception"))
// when
testObject.toJson()
}
我有一个class如下图:
@Getter
@Setter
public class User{
@Autowired
Logger log;
private String name;
private String age;
public String toJson(){
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = null;
try{
jsonString = objectMapper.writeValueAsString(this);
}catch(JsonProcessingException jsnEx){
log.writeErr(" Error while parsing the Json" + jsnEx.getMessage());
}
return jsonString;
}
}
现在我正在尝试为此编写一个 单元测试 案例,我可以抛出异常并使用 Mockito 对 catch 子句进行单元测试,但我无法模拟它。我注意到对象映射器 class 在内部将所有内容转换为字符串,即使我将 name 和 age 设置为 null。谁能帮我解决这个问题?
在 Spring 中使用构造函数注入。这将允许您在 class 中注入模拟的 ObjectMapper,然后您可以在测试中设置行为。见下文。
@Getter
@Setter
public class User{
private String name;
private String age;
private final Logger log;
private final ObjectMapper objectMapper;
public User(Logger log, ObjectMapper objectMapper){
this.log = log;
this.objectMapper = objectMapper;
}
public String toJson(){
String jsonString = null;
try{
jsonString = objectMapper.writeValueAsString(this);
}catch(JsonProcessingException jsnEx){
log.writeErr(" Error while parsing the Json" + jsnEx.getMessage());
}
return jsonString;
}
}
// Test
@Before
public setup(){
@Mock
Logger log;
@Mock
ObjectMapper objectMapper;
testObject = new User(log, objectMapper);
}
@Test
public test_toJson(){
// given
when(objectMapper.writeValueAsString(any())).thenThrow(new JsonProcessingException("Fake exception"))
// when
testObject.toJson()
}