如何为返回IOException的ObjectMapper.writeValueAsString(object)编写单元测试

时间:2019-08-11 06:38:46

标签: java objectmapper

我正在为ObjectMapper().writeValueAsString(object)编写单元测试。 我有一个捕获IOException的catch块。 我需要对该捕获块进行单元测试。

在这种情况下,我需要知道IOException返回了ObjectMapper

要抛出JsonProcessingException,我已经找到了answer

但是我没有发现任何引发IOException的情况。

 protected void logJsonForMetrics(final Logger logger,
                                     final Object object)
    {
        try
        {
            final String jsonString = new ObjectMapper().writeValueAsString(object);
            logger.info(jsonString);
        }
        catch (final JsonProcessingException e)
        {
            LOGGER.error("Unable to create a json object" + e);
        }
        catch (final IOExcepton e)
        {
            LOGGER.error("Error while logging metric " + e);
        }
    }

我想要一个返回IOException的方案。

2 个答案:

答案 0 :(得分:0)

writeValueAsString()很可能不会抛出IOException,因为它在内部使用StringWriter来写入值。来自documentation

  

[...]在功能上等同于用writeValue(Writer,Object)调用StringWriter并构造字符串[...]

如果要检查IOException,则需要使用writeValue()方法,并提供一个Writer对象,该对象将抛出IOException

请记住,从2.1版开始,IOException中的writeValueAsString()“ throws”语句已被删除(很可能是因为不再抛出该异常)。

答案 1 :(得分:0)

注意:在2.1版的jackson-databind之前,symbol_list = ['MIC'] for x in range(0, len(data)): if data[x]['symbol'] in symbol_list: response = requests.get(base_url + data[x]['link'], headers=headers) soup = bs4.BeautifulSoup(response.text, 'html.parser') try: # Announcement is 6th element of class t1. announce = soup.find_all(class_='t1')[5].get_text() print("Announcement: ", announce) except: print("Announcement not found") try: pdf_file = base_url + soup.find_all('a', href=True)[0]['href'] print("File_Link: ", pdf_file) except: print('PDF not found') 个方法throws子句包含IOException; 2.1将其删除。