jUnit未引发预期异常

时间:2020-09-10 17:36:59

标签: java exception junit

我正在测试以下课程:

@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()不能正常工作。

0 个答案:

没有答案