字符串在Junit中解析日期测试



我正在尝试验证包含日期解析实现的方法。

@Override
public void pasreDates(String startDate, String endDate) {
    LocalDateTime startDateTime = null;
    LocalDateTime endDateTime = null;
    // parsing date and times
    try {
        startDateTime = LocalDateTime.parse(startDate, DATE_TIME_FORMATTER);
        endDateTime = LocalDateTime.parse(endDate, DATE_TIME_FORMATTER);
    } catch (DateTimeParseException e) {
        LOGGER.error(ERROR_PARSING_DATE_TIME, e);
    }
}

我只是尝试使用junit日期和时间(日期(对此进行测试,并在发生异常时验证日志。我的测试方法看起来像

@Test
public void should_log_an_error_if_given_date_string_is_in_invalid_format() {
    dealMapsUtil.storeDataToProductIdToDealDateMap(dummyProductId, dummyDeal, dummyStartDate, dummyEndDate);
    verify(logger, times(1)).error(ERROR_PARSING_DATE_TIME);
}

我如何验证日期格式以及我可以为此方法编写的其他测试用例是什么?我经历了几个教程,但没有帮助。

正确注意到@timothy卡车,您不验证您调用的内容。
您调用logger.error(String, Throwable),但验证logger.error(String)。它只会失败。

无论如何,嘲笑和验证Logger通常不是笔直的,只能在我们没有选择的情况下执行。

1(实际上您不单位测试parseDates()。当您调用一种调用它的方法时,您可以在"集成"中对其进行测试:

 dealMapsUtil.storeDataToProductIdToDealDateMap

单位测试应集中于测试的行为。
如果可以从多个位置调用此方法,您应该怀疑它是否与在自己的类中进行测试 first 并"验证"在呼叫者类的测试中调用。。

2( parseDates()并未为客户端类定义清晰的API,因为单一检查解析失败是否为日志。
日志和行为结果是不同的事物,第一个不应替换第二个。
为了使其更加容易,您可以返回boolean来指示解析的结果或在parseDates()中抛出例外。
这样,您可以非常直接测试此方法。

最新更新