<aside> 📢 목차
</aside>
@Entity
@EntityListeners(AuditingEntityListener.class)
public class AuthCode {
private static final long VALID_MINUTE = 5L;
@CreatedDate
private LocalDateTime createdAt;
//...
public void verifyTime() {
LocalDateTime expireTime = this.createdAt.plusMinutes(VALID_MINUTE);
if (LocalDateTime.now().isAfter(expireTime)) {
throw new InvalidAuthCodeException();
}
}
}
인증코드가 생성시점에서 5분이 지나면 만료
되는 로직을 짜던 도중이었다.
구현 후 테스트코드를 짜려고 보니 문제가 생겼다.
**LocalDateTime.now()**
는 시스템의 지금 시간 을 리턴하는데
어떻게 **특정 시간으로부터 만료되었는지**
검증하는 테스트 코드를 짤 수 있지? (어떻게 타임머신을 타지??)
즉, 시간 변수를 테스트에서 임의로 지정해 쓸 수 없었다.
그래서 **현재시각을 임의지정 후 모킹**
해 테스트하는 방법을 생각해봤다.
여러가지 방법이 있었다.
**Clock**
을 빈 등록해 모킹하기**LocalDateTime**
을 **static mock**
으로 모킹하기**LocalDateTime.now()**
를 리턴하는 새 클래스 생성해 모킹하기