while(true)
- 프로젝트 진행 중 CommandLineRunner를 사용한 순간이 있었다. 통합 테스트를 진행하면 스프링부트를 동작시킨다. 그러므로 원치 않게 CommandLineRunner 가 작동하였다. 그리고 해당 빈은 while(true) 로 계속 동작하는 작업이었다. 그래서 while(true)가 끝나지 않기 때문에 결과적으로 테스트 코드는 작동하지 못했다.
- 그럼 테스트를 할 때 해당 기능을 꺼야 한다. 어떻게 꺼야 할까?
properties의 활용
- 결론적으로 아래와 같이 해결하였고, 가장 이상적인 방법이었다.
@SpringBootTest(properties = "telegramApi.active=false")
class TestCode {
@Test
{...코드뭉치...}
}
@Component
@ConditionalOnProperty(
name = "telegramApi.active",
havingValue = "true",
matchIfMissing = true)
public class TelegramApplication implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
while (true){
{...코드 뭉치...}
}
}
그 외의 방법들은..
- 구글링을 했을 때 가장 많은 대안은, 특정 테스트코드를 동작할 때 특정 빈을 생성하지 않도록 하는 방법이었다.
- 하지만 이 방법은 한계가 있는데, 일단 인텔리제이에서 테스트코드를 동작할 때 어떤 profile도 동작하지 않는다. 만약 프로파일을 적용한다면, 매번 -Dspring... 을 넣어야 할 테다.
- 그리고 이것은 개인적인 문제인데, 나는 프로파일을 통해 특정 빈의 생성을 막지 못했다. 이 방법을 실패해서 위의 방법으로 하였고 성공했다.