我正在测试以下课程:
@Service
public class ClassToBeTested {
private final ObjectMapper mapper;
public ClassToBeTested(ObjectMapper mapper) {
this.mapper = mapper;
}
public void publicMethod(messageDto dto) {
privateMethod(dto, param, "other string");
}
private void privateMethod(Object dto, String param, String param2) {
Map<String, Object> attributes = new HashMap<>();
try {
attributes = mapper.readValue(mapper.writeValueAsString(dto),
new TypeReference<Map<String, Object>>() {
});
} catch (JsonProcessingException e) {
e.printStackTrace();
}
attributes.put("level", "error");
}
}
,我想让mapper抛出JsonProcessingException。那是我的测试课:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = TestContextConfiguration.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
public class ClassToBeTestedTest {
@MockBean
private ObjectMapper mapper;
private ClassToBeTested classToBeTestedActor;
@Before
public void setup() {
classToBeTestedActor = new ClassToBeTested(mapper);
}
@Test
public void shouldFailJsonParsing() throws JsonProcessingException {
// Given
final Dto dto = mock(Dto.class);
// When
when(mapper.writeValueAsString(any()))
.thenThrow(JsonProcessingException.class);
// Then
Assertions.assertThrows(JsonProcessingException.class,
() -> classToBeTestedActor.publicMethod(dto));
}
}
我不明白为什么测试失败。特别是,似乎在NullPointerException
上引发了attributes.put("level", "error");
,而没有引发JsonProcessingException
。从那以后,测试失败。
考虑到JsonProcessingException
应该在受NullPointerException
影响的行之前抛出,在我看来,构造when().thenThrow()
不能正常工作。