의존성 주입과 테스트(1) - @Autowired
기존 코드: @Autowired 사용
처음에는 @Autowired를 사용하여 의존성을 주입했습니다. 아래는 초기 설정 코드입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@SpringBootTest
public class NovelCrawlerServiceTest {
@Autowired
private NovelCrawlerService novelCrawlerService;
@DisplayName("데이터베이스에 소설 저장 및 조회 테스트")
@Test
void saveNovelsTest() {}
@DisplayName("같은 작품에 대해서 다른 사이트일 때 사이트 정보만 추가되는지 확인하는 테스트")
@Test
void saveNovels_existingNovelTest() {}
}
처음에는 필드 주입을 사용하여 서비스 코드를 작성했고, 테스트 코드도 당연히 @Autowired로 작성했습니다.
문제점
가독성 : 어떤 의존성이 주입되는지 명확히 알기 어렵고, 특히 여러 의존성이 있다보니 더 혼란스러움
테스트 실행 속도 : 테스트 클래스마다 컨텍스트를 새로 로드하기 때문에 시간이 많이 소요
의존성 관리 : 필드 주입 방식은 테스트에서 의존성을 모킹하기 어려움
서비스 코드 : @Autowired에서 생성자 주입으로 전환
Spring 애플리케이션에서 의존성 주입 방식을 @Autowired에서 생성자 주입으로 변경하게 되면서 테스트 코드도 수정하게 되었습니다.
1
2
3
4
5
6
7
8
9
10
11
@Service
@RequiredArgsConstructor
public class NovelCrawlerService {
private final NovelRepository novelRepository;
private final SiteRepository siteRepository;
private final NovelSiteRepository novelSiteRepository;
private final NaverSeriesCrawler naverSeriesCrawler;
private final KakaoPageCrawler kakaoPageCrawler;
// 서비스 메소드들
}
고민되는 부분
Mock vs 실제 DB
서비스 코드를 생성자 주입 방식으로 변경한 후 테스트 코드 작성에 대한 고민이 있었습니다. NovelCrawlerService의 메서드들은 DB와 관련된 서비스이다 보니, 테스트 코드를 실제 DB와 연결해야 할지에 대한 고민이 있었습니다.
다음 포스트에서는 Mock 객체를 활용한 테스트 코드를 작성해보겠습니다.
This post is licensed under CC BY 4.0 by the author.