我的功能如下所示,可以从任何有效载荷中生成一个提供类型的对象:
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);
}编写了测试用例如下
@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,另一个模型类,甚至父类本身,但没有成功。在这种情况下,请告诉我正确的方向。
发布于 2020-07-06 15:45:05
如所解释的Why doesn't Mockito mock static methods?
不能使用mockito模拟静态方法。无论如何,我想您的目标是检查这个实用程序方法是否像您预期的那样运行,以防objectMapper抛出异常或工作正常。因此,您可以将方法非静态化,然后注入objectMapper并尝试如下所示:
@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());
}以及积极的情况
@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());
}发布于 2020-07-07 09:41:55
测试此方法的最佳方法是将任何数据类型转换为JSON,并调用该方法将其转换为原始数据类型,尝试使用助手类或任何其他数据类型
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
https://stackoverflow.com/questions/62759578
复制相似问题