gpt4 book ai didi

java - JUnit 中的字符串解析日期测试?

转载 作者:行者123 更新时间:2023-12-02 11:38:31 28 4
gpt4 key购买 nike

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

@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 Truckle 正确注意到的那样,您不会验证您调用的内容。
您调用 logger.error(String, Throwable) 但验证 logger.error(String)。它只能失败。

无论如何,模拟和验证 Logger 通常不是直接的,只有在我们别无选择的情况下才应该执行。

1) 实际上,您没有对 parseDates() 进行单元测试。当您调用调用它的方法时,您可以在“集成”中测试它:

 dealMapsUtil.storeDataToProductIdToDealDateMap

单元测试应该关注测试的行为。
如果可以从多个位置调用此方法,您应该想知道是否首先在它自己的类中测试它并“验证”它在调用者类的测试中被调用是否不相关.

2) parseDates() 没有为客户端类定义明确的 API 作为检查解析失败是否为日志的单一方法。
日志和行为结果是不同的东西,第一个不应取代第二个。
为了更方便,您可以返回一个 boolean 来指示解析结果,或者在 parseDates() 中抛出异常。
这样你就可以非常直接地测试这个方法了。

关于java - JUnit 中的字符串解析日期测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48742133/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com