강의

멘토링

커뮤니티

Inflearn Community Q&A

jmkooz's profile image
jmkooz

asked

Toby's Spring 6 - Understanding and Principles

Learning Test

안녕하세요.

Written on

·

129

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()'
javaspring

Answer 2

1

tobyilee님의 프로필 이미지
tobyilee
Instructor

아마 아래 질문과 같은 상황이신 것 같네요.
https://inf.run/U9fwJ

 

now()를 기본 system clock에서 실행을 하면 매번 새로운 시간이 돌아오는 것으로 기대를 합니다. 그래서 제가 사용하는 맥에서는 아주 작은 시간이라도 now()를 호출 할 때마다 시간이 바뀝니다.
그런데 윈도우의 자바 내부 구현에서는 now()가 돌려주는 시간 최소 단위가 달라서 그런지, 이렇게 연속으로 now()를 실행하는 코드라면 정말 작은 시간차만 있어서 같은 시간이 돌아오기도 합니다.

위의 글을 읽어보시면 윈도우에서 now()를 30번 실행했더니 계속 같은 값이 나오다가 뒷 부분에서 시간이 바뀐다고 합니다. 그래서 이 테스트가 실패하네요.

테스트 중간에 Thread.sleep(100) 정도라도 넣어서 잠깐 대기했다가 now()가 다시 실행되도록 만들면 테스트가 성공할 겁니다.

OS마다 자바 언어 구현의 차이가 있기 때문에 발생하는 문제입니다.

한번 확인해보시고 그래도 궁금하신 점이 있으시면 알려주세요.

 

0

jmkooz님의 프로필 이미지
jmkooz
Questioner

os 차이의 문제가 있었군요!

thread.sleep(1) 정도로 지정하니 테스트가 통과하였습니다.

항상 강의 잘 듣고있습니다.


감사합니다. :)

jmkooz's profile image
jmkooz

asked

Ask a question