테스트와 의존성 주입 (DI) - Spring 프레임워크의 핵심 개념

궁금하면 500원·2024년 7월 2일

미생의 스프링

목록 보기
14/48

1. 테스트와 의존성 주입 (DI)

테스트에서의 접근 방법

테스트를 진행할 때, Payment 클래스와 같은 내부 구현을 노출시키는 접근 방법은
초기 학습 과정에서 많이 사용됩니다.
이는 테스트 코드에서 직접적으로 클래스의 속성을 접근해야 하는 상황을 만들 수 있습니다.
그러나 이러한 방식은 테스트가 진행되면서 점점 더 외부에 노출되는 속성이 많아질 수 있습니다.

public class Payment {
    private double amount;
    private String currency;

    // 생성자 및 getter/setter 생략

    // 테스트용으로 getter를 제공할 수 있지만, 실제 테스트에서는 mock 객체를 사용하는 것이 더 좋습니다.
    public double getAmount() {
        return amount;
    }
}

2. @Autowired와 빈 팩토리

@Autowired 사용과 빈 팩토리

@Autowired 어노테이션은 Spring의 의존성 주입 기능을 간편하게 사용할 수 있게 해줍니다.
그러나 이 어노테이션을 빈 팩토리와 관련하여 설명할 때,
빈 객체를 자동으로 주입받는 과정에 대해 자연스럽게 넘어가는 경우가 있습니다.
이로 인해 @Autowired의 사용 방법과 빈 팩토리의 관계를 명확히 이해하지 못할 수 있습니다.

@Service
public class PaymentService {
    private final PaymentRepository paymentRepository;

    @Autowired
    public PaymentService(PaymentRepository paymentRepository) {
        this.paymentRepository = paymentRepository;
    }
}

3. Clock을 이용한 시간 테스트

Clock vs. LocalDateTime

시간 관련 테스트를 수행할 때 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

profile
에러가 나도 괜찮아 — 그건 내가 배우고 있다는 증거야.

0개의 댓글