thumbnail

문제

다음과 같이 패키지 구조를 가지고 있습니다.

<img src="https://static.podo-dev.com/blogs/images/2020/03/12/origin/7b94d342-e34e-45df-bfcd-96016e3bdadd.png" alt="base64.png" style="width:161px;">

domain 패키지 에는, 해당 도메인 모델들에 관련된
application, domain service, entity, repository 등이 정의되어있습니다.

infra 패키지 에는, redis cofing, mq config 등과 같은
외부 시스템과 관련된 Component가 정의 되어있습니다.

<br>

그런데, 문제는

특정 도메인 모델의 통합테스트를 진행하려고 할 때 입니다.

@SpringBootTest 진행 시,
infra 패키지에 정의된 Componet도 같이 등록됩니다.
그리고 커넥션이 되지 않는다는 ?! 에러를 던져줍니다.

아니 너네가 지금은 필요가없어요.. ㅠㅠ

<br>

그렇다고 infra 패키지의 모든 Component@Profile("!domain-test")를 명시할 수는 없습니다..

<br>

해결법

domain 패키지에 DomainIntegrataionApp을 정의했습니다.

<img src="https://static.podo-dev.com/blogs/images/2020/03/12/origin/f8ef4658-4e71-42f1-8c4e-c16dcd7c0ca2.png" alt="base64.png" style="width:297px;">

<br>

@SpringBootTest는 현재 패키지를 시작으로,
상위 패키지를 따라가면 @SpringBootConfiguration을 어노테이션을 찾습니다.
@SpringBootConfigurationApplication Context를 만드는데 필요한 config를 읽는 어노테이션입니다.

@SpringBootTest by default starts searching in the current package of the test class and then searches upwards through the package structure, looking for a class annotated with @SpringBootConfiguration from which it then reads the configuration to create an application context.
https://reflectoring.io/spring-boot-test/

<br>

DomainIntegrataionApp 클래스를 보면 다음과 같이 정의합니다.

@SpringBootApplication(scanBasePackages = "podo.domain")
@EnableJpaRepositories("podo.domain")
@EntityScan("podo.domain")
public class DomainIntegrationApp {
}

@SpringBootApplication@SpringBootConfiguration를 포함하고 있습니다.

<br>

이제 domain 패키지내에서의 @SpringBootTest
domain패키지내에서의 Component만을 scan하게 됩니다.
따라서 불필요한 infra패키지에 Componet는 등록되지 않습니다.

CommentCount 0
이전 댓글 보기
등록
TOP