문제:
작동하는 동일한 입력 문자열로 DateTimeFormatterBuilder에 대한 단위 테스트가 실패합니다. 런타임에. 테스트 중인 문자열 값은 "2018년 5월 25일 11:10"입니다.
테스트 대상 방법:
public void getTimeDifference(@RequestParam String startDate, @RequestParam String endDate) { DateTimeFormatter DATE_TIME_FORMAT = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy HH:mm").toFormatter(); LocalDateTime.parse(startDate,DATE_TIME_FORMAT); return messages; }
테스트 방법:
@Test public void testFormat() throws Exception { final String startDateFormatA = "25-May-2018 11:10"; final String endDateFormatA = "25-May-2018 11:10"; assertEquals("06:00", callDbController.getTimeDifference(startDateFormatA, endDateFormatA)[1]); }
조사:
해결책:
문자열에서 월 이름을 구문 분석하기 위해 JVM의 기본 로케일을 사용하기 때문에 문제가 발생합니다. 이 문제를 해결하려면 포맷터를 생성하는 동안 Locale.ENGLISH 로케일을 지정하세요.
DateTimeFormatter DATE_TIME_FORMAT = new DateTimeFormatterBuilder() .parseCaseInsensitive() .appendPattern("dd-MMM-yyyy HH:mm") .toFormatter(Locale.ENGLISH);
로케일을 명시적으로 설정하면 포맷터가 JVM의 기본 로케일에 관계없이 일관된 구문 분석을 보장하여 테스트 환경에서 문제를 해결합니다.
위 내용은 내 DateTimeFormatterBuilder 단위 테스트가 실패하지만 런타임이 동일한 입력 문자열로 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!