
테스트를 진행할 때, Payment 클래스와 같은 내부 구현을 노출시키는 접근 방법은
초기 학습 과정에서 많이 사용됩니다.
이는 테스트 코드에서 직접적으로 클래스의 속성을 접근해야 하는 상황을 만들 수 있습니다.
그러나 이러한 방식은 테스트가 진행되면서 점점 더 외부에 노출되는 속성이 많아질 수 있습니다.
public class Payment {
private double amount;
private String currency;
// 생성자 및 getter/setter 생략
// 테스트용으로 getter를 제공할 수 있지만, 실제 테스트에서는 mock 객체를 사용하는 것이 더 좋습니다.
public double getAmount() {
return amount;
}
}
@Autowired 어노테이션은 Spring의 의존성 주입 기능을 간편하게 사용할 수 있게 해줍니다.
그러나 이 어노테이션을 빈 팩토리와 관련하여 설명할 때,
빈 객체를 자동으로 주입받는 과정에 대해 자연스럽게 넘어가는 경우가 있습니다.
이로 인해 @Autowired의 사용 방법과 빈 팩토리의 관계를 명확히 이해하지 못할 수 있습니다.
@Service
public class PaymentService {
private final PaymentRepository paymentRepository;
@Autowired
public PaymentService(PaymentRepository paymentRepository) {
this.paymentRepository = paymentRepository;
}
}
시간 관련 테스트를 수행할 때 Clock과 LocalDateTime의 사용은 중요한 차이가 있습니다.
과거에는 Calendar를 사용하라는 조언이 있었지만,
현재는 Clock이나 LocalDateTime을 사용하는 것이 더 현대적인 접근 방법으로 간주됩니다.
import java.time.Clock;
import java.time.LocalDateTime;
public class TimeService {
private final Clock clock;
public TimeService(Clock clock) {
this.clock = clock;
}
public LocalDateTime getCurrentTime() {
return LocalDateTime.now(clock);
}
}
[출처]
토비의스프링 6