我有一个方法,当给定的日期和时间无效时抛出异常。
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);
return false;
}
在测试中我试图用无效数据验证此异常。
@Test
public void should_throw_an_exception_if_failed_to_parse_dates() {
try {
parseStartAndEndDates("sdf", "ssdf"); // parsing invalid data here
fail(); //remember this line, else 'may' false positive
} catch (DateTimeParseException e) {
assertThat(e.getMessage(), is(ERROR_PARSING_DATE_TIME));
}
}
但总是失败。什么应该是测试这种情况的正确方法。
答案 0 :(得分:2)
更改您的测试代码,因为如果抛出false
,您将返回DateTimeParseException
@Test
public void should_throw_an_exception_if_failed_to_parse_dates() {
assertThat(parseStartAndEndDates("sdf", "ssdf")).isFalse(); // parsing invalid data here
}
答案 1 :(得分:1)
你有两种方式: 1)在第一种方法中抛出异常:
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);
throw new DateTimeParseException();
}
...
@Test(expected = DateTimeParseException.class)
public void should_throw_an_exception_if_failed_to_parse_dates(){
parseStartAndEndDates("sdf", "ssdf"); // parsing invalid data here
}
2)在测试中检查为false,因为parseStartAndEndDates()
返回false
:
@Test
public void should_throw_an_exception_if_failed_to_parse_dates() {
assertFalse(parseStartAndEndDates("sdf", "ssdf")); // parsing invalid data here
}
答案 2 :(得分:1)
像其他答案一样,你的方法实际上并没有抛出。您正在测试的消息实际上已传递给记录器。如果这是您想要的API,并且您仍然希望测试是否发出了正确的消息,那么您必须在测试中模拟记录器