首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Mockito和ObjectMapper的Java ObjectMapper

带有Mockito和ObjectMapper的Java ObjectMapper
EN

Stack Overflow用户
提问于 2020-07-06 15:41:36
回答 2查看 779关注 0票数 1

我的功能如下所示,可以从任何有效载荷中生成一个提供类型的对象:

代码语言:javascript
复制
public static <T> Optional<T> generateObject(String payloadJson, Class<T> type) {
        T objectPayload = null;
        try {
            objectPayload = objectMapper.readValue(payloadJson, type);
        }catch (IOException e) {
            log.info(e.getMessage());
        }
        return Optional.ofNullable(objectPayload);
    }

编写了测试用例如下

代码语言:javascript
复制
   @Test
    void generateObject() throws Exception {

        Mockito.when( eventUtil.generateObject("a", Mockito.any(Class.class)) ).thenReturn( Optional.of("") );
        Mockito.<Optional<Object>>when( eventUtil.generateObject("b", Mockito.any(Class.class)) ).thenReturn( Optional.of("") );
        Optional<Object> o2 = eventUtil.generateObject("b", Mockito.any(Class.class));
        assertEquals( "lol", o2.get() );
        Mockito.verify(eventUtil);

    }

Mockito.when语句上的测试执行失败

java.lang.IllegalArgumentException:无法识别的

类型:空

**注意:我尝试使用thenReturn( Optional.of())提供null,另一个模型类,甚至父类本身,但没有成功。在这种情况下,请告诉我正确的方向。

EN

回答 2

Stack Overflow用户

发布于 2020-07-06 15:45:05

如所解释的Why doesn't Mockito mock static methods?

不能使用mockito模拟静态方法。无论如何,我想您的目标是检查这个实用程序方法是否像您预期的那样运行,以防objectMapper抛出异常或工作正常。因此,您可以将方法非静态化,然后注入objectMapper并尝试如下所示:

代码语言:javascript
复制
@Test
    void objectMapperThrowsException() throws Exception {
        ObjectMapper mapper = Mockito.mock(ObjectMapper.class);
        EventUtil eventUtil = new EventUtil(mapper);
        Mockito.when(mapper.readValue(any(),any())).thenThrow(IOException.class);
        Optional<Object> result = eventUtil.generateObject("b", Object.class);
        assertTrue(result.isEmpty());
    }

以及积极的情况

代码语言:javascript
复制
@Test
        void objectMapperReturnAValidObject() throws Exception {
            Object anObject = new Object();
            ObjectMapper mapper = Mockito.mock(ObjectMapper.class);
            EventUtil eventUtil = new EventUtil(mapper);
            Mockito.when(mapper.readValue(any(),any())).thenReturn(anObject);
            Optional<Object> result = eventUtil.generateObject("b", Object.class);
            assertFalse(result.isEmpty());
            assertEquals(anObject, result.get());
        }
票数 0
EN

Stack Overflow用户

发布于 2020-07-07 09:41:55

测试此方法的最佳方法是将任何数据类型转换为JSON,并调用该方法将其转换为原始数据类型,尝试使用助手类或任何其他数据类型

代码语言:javascript
复制
public class TargetTest {

   @Test
    void generateObject() throws Exception {
         // Arrange
         ObjectMapper mapper = new ObjectMapper();
         Helper helper = new Helper();
         helper.setName("test");
         String json = mapper.writeValueAsString(helper );

         // Act
         Helper actual = EventUtil.generateObject(json, Helper.class);

         // Assert
    }

    class Helper {
        private String name;
        
        // Getter and setter
    }
}

,如果您想要模拟它,请尝试使用PowerMockito

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62759578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档