如何为java单元测试触发jsonprocessingexception?

b4lqfgs4  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(313)

我在一个名为“httpresponsehelper”的类中有一个方法,当它抛出一个jsonprocessingexception时,我正在尝试对该方法进行单元测试,但我很难让它这样做:

private static void populateHTTPResponseWithData(ObjectNode httpResponse)
    {
        ObjectMapper mapper = new ObjectMapper();
        responseMapData.keySet().forEach(item -> {
            try
            {
                httpResponse.put(item, mapper.writeValueAsString(responseMapData.get(item)));
            }
            catch (JsonProcessingException e)
            {
                LOGGER.error("Json Processing Exception", e);
            }
        });
    }

httpresponse参数是objectnode类型(jackson库),然后在方法体中从objectmapper类创建一个Map器对象。
resonsemapdata是一个名为“messageprocessresults”的类中的concurrenthashmap>。在这里,它看起来像是遍历键集,并在httpresponse参数中插入一个键值对字符串。
我尝试在mapper上使用mockito返回一个格式错误的json,但它似乎将值写入字符串并每次传递。
有没有人有什么建议或者有什么简单的方法?感谢您花时间阅读这个问题,并可能帮助我:d

w41d8nur

w41d8nur1#

在进行单元测试时,您不会关注底层代码如何创建异常,而是关注代码如何处理此类异常。在这方面,你可以嘲笑 ObjectNode 对象,并要求它在任何时候抛出异常 put 方法被调用。

@Test
public void someTest(){
    Object mockObject = Mockito.mock(ObjectNode.class);
    Mockito.when(mockObject.put()).thenThrow(new JsonProcessingException ("my mock exception"));
    functionUndertest(mockObject); //this is where you inject your mock function. In your case you are expecting a error message to be printed.
}

相关问题