작성
·
84
0
아래 코드에서 계속해서 테스트 오류가 뜹니다..
이유가 무엇일까요?
오히려 isequalto 를 사용했을때 테스트가 성공해버려요
@Test
void Clock() {
Clock clock = Clock.systemDefaultZone();
LocalDateTime dt1 = LocalDateTime.now(clock);
LocalDateTime dt2 = LocalDateTime.now(clock);
Assertions.assertThat(dt2).isAfter(dt1);
}
// 오류 메세지
java.lang.AssertionError:
Expecting actual:
2025-05-09T16:54:49.066025800 (java.time.LocalDateTime)
to be strictly after:
2025-05-09T16:54:49.066025800 (java.time.LocalDateTime)
when comparing values using 'ChronoLocalDateTime.timeLineOrder()'
답변 2
1
아마 아래 질문과 같은 상황이신 것 같네요.
https://inf.run/U9fwJ
now()를 기본 system clock에서 실행을 하면 매번 새로운 시간이 돌아오는 것으로 기대를 합니다. 그래서 제가 사용하는 맥에서는 아주 작은 시간이라도 now()를 호출 할 때마다 시간이 바뀝니다.
그런데 윈도우의 자바 내부 구현에서는 now()가 돌려주는 시간 최소 단위가 달라서 그런지, 이렇게 연속으로 now()를 실행하는 코드라면 정말 작은 시간차만 있어서 같은 시간이 돌아오기도 합니다.
위의 글을 읽어보시면 윈도우에서 now()를 30번 실행했더니 계속 같은 값이 나오다가 뒷 부분에서 시간이 바뀐다고 합니다. 그래서 이 테스트가 실패하네요.
테스트 중간에 Thread.sleep(100) 정도라도 넣어서 잠깐 대기했다가 now()가 다시 실행되도록 만들면 테스트가 성공할 겁니다.
OS마다 자바 언어 구현의 차이가 있기 때문에 발생하는 문제입니다.
한번 확인해보시고 그래도 궁금하신 점이 있으시면 알려주세요.
0