상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
행복을 느끼기 위해 어떤 사람들과 시간을 보내고 싶나요?
즐거움을 찾기 위해 어떤 여행을 계획하고 있나요?
자바스크립트에서 함수를 반환하는 함수는 어떻게 작성하나요?
프로그래밍에서 주석의 중요성은 무엇인가요?
FFmpeg에서 오디오의 볼륨을 조정하는 방법은?
이케부쿠로의 유명한 지역 사회 행사 일정은 어떻게 확인하나요?
우에노에서 유명한 기념품은 무엇인가요?
오스만 제국의 군주제는 어떻게 운영되었나요?
오스만 제국의 종교 지도자는 누구였나요?
블렌더란 무엇인가요?
블렌더에서 스크린 레코딩을 하는 방법은 무엇인가요?
블렌더에서 오브젝트의 스케일을 조정하는 방법은 무엇인가요?
Previous
Next
수정하기 - JUnit에서 의존성 주입을 사용하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
JUnit에서 의존성 주입(Dependency Injection, DI)을 사용하는 방법은 테스트 코드에서 객체 간의 의존성을 명확히 하고, 보다 유연하고 유지보수하기 쉬운 테스트를 작성하는 데 도움을 줍니다. JUnit 자체는 DI 기능을 제공하지 않지만, Spring Framework와 같은 DI 지원 프레임워크와 함께 사용하거나, JUnit 5의 확장 기능을 활용하여 DI를 구현할 수 있습니다. 각각의 주요 방법을 자세히 설명하면 다음과 같습니다. --- 1. Spring Framework와 함께 JUnit에서 DI 사용하기 대부분의 경우, 실제 애플리케이션에서 DI를 적용한 컴포넌트를 테스트할 때 Spring의 DI 컨테이너를 활용합니다. Spring은 테스트용으로 JUnit과 잘 통합되며, 테스트 클래스 내에 구성한 빈(Bean)을 자동 주입할 수 있습니다. 1-1. @ExtendWith(SpringExtension.class)과 @ContextConfiguration 사용 (JUnit 5 기준) - JUnit 5부터는 `@ExtendWith(SpringExtension.class)` 어노테이션을 테스트 클래스에 사용해 Spring 컨텍스트와 연동합니다. - `@ContextConfiguration` 또는 `@SpringBootTest`를 이용해 테스트에 필요한 Spring 설정 파일이나 클래스, Spring Boot 환경을 지정합니다. - `@Autowired`를 통해 테스트 대상 컴포넌트나 의존 객체를 주입합니다. ```java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.junit.jupiter.api.extension.ExtendWith; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = {AppConfig.class}) public class MyServiceTest { @Autowired private MyService myService; @Test public void testService() { // myService가 DI된 상태로 테스트 가능 assertNotNull(myService); myService.performAction(); } } ``` - `AppConfig.class`는 애플리케이션의 Spring 설정 클래스이며, 빈 정의를 포함합니다. - Spring Boot 프로젝트라면 `@SpringBootTest`를 써서 쉽게 컨텍스트를 띄울 수 있습니다. 1-2. @MockBean 등과 혼용하기 - Spring Boot Test에서는 `@MockBean`을 써서 특정 의존성을 mock 객체로 주입할 수 있습니다. - 이를 이용하면 더 세밀하게 의존성을 관리할 수 있습니다. --- 2. JUnit 5 자체 확장 기능을 통해 DI 흉내 내기 JUnit 5는 테스트 생명주기에 개입할 수 있는 확장(extension) 메커니즘을 제공합니다. 이를 이용해 간단한 DI 구현도 가능합니다. 예를 들어 생성자 주입이나 필드 주입을 확장 기능으로 모방할 수 있습니다. - `ParameterResolver` 인터페이스를 구현해 테스트 메소드, 생성자 등에 매개변수를 주입하는 식입니다. ```java import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.ParameterContext; import org.junit.jupiter.api.extension.ParameterResolver; public class MyServiceParameterResolver implements ParameterResolver { @Override public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { return parameterContext.getParameter().getType() == MyService.class; } @Override public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) { return new MyService(); // 간단한 직접 생성 또는 복잡한 DI 로직 가능 } } ``` 테스트 클래스에서: ```java @ExtendWith(MyServiceParameterResolver.class) public class MyServiceTest { @Test public void testService(MyService myService) { // 생성자나 메소드 파라미터로 주입받음 assertNotNull(myService); myService.performAction(); } } ``` 이 방법은 Spring 없이도 원하는 객체를 테스트 메소드에 주입할 수 있지만, 복잡한 DI 컨테이너 기능을 대체하기엔 한계가 있습니다. --- 3. 수동 DI (Constructor/Setter Injection) 활용 JUnit 자체가 DI를 지원하지 않으므로, 가장 간단한 방법은 테스트 클래스에 명시적으로 의존 객체를 주입하거나, 생성자 및 필드에 직접 할당하는 방법입니다. ```java public class MyServiceTest { private MyDependency dependency = new MyDependency(); private MyService myService = new MyService(dependency); @Test public void testService() { myService.performAction(); // 검증 코드 } } ``` 이 방식은 명확하고 간단하지만, 매번 의존성 객체를 직접 생성해줘야 하므로 테스트 코드가 복잡해질 수 있습니다. --- 요약 - Spring Framework와 통합: 실제 개발 환경에서 가장 많이 사용하며, `@ExtendWith(SpringExtension.class)` + `@ContextConfiguration` 또는 `@SpringBootTest` + `@Autowired` 조합으로 DI를 가장 쉽게 구현. - JUnit 5 <a href='https://sangseek.com/sangseeks/확장기능/ko'>확장기능</a>: ParameterResolver 등을 사용해 테스트 메소드에 의존성을 주입하는 <a href='https://sangseek.com/sangseeks/고급 기법/ko'>고급 기법</a>. Spring이 없는 가벼운 프로젝트에 적합. - 직접 주입: 테스트 코드에서 직접 생성자나 필드 할당으로 의존성 주입을 흉내. 따라서 JUnit에서 DI를 사용하려면 보통 Spring TestContext 프레임워크를 활용하거나, 필요에 따라 JUnit 5의 확장 기능을 직접 구현하는 방식을 사용합니다. 이때 의존성 주입 어노테이션이나 메커니즘을 적용함으로써 테스트 코드의 재사용성과 유연성을 크게 높일 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기