-
컨테이너를 활용한 통합 테스트DEV/ETC 2024. 9. 24. 20:45
일반적으로 모의객체를 활용한 단위 테스트는 컨테이너에서 제공하는 객체는 모의하기 어렵고, 테스트를 작성하기 복잡하다는 한계가 있다.
ex) HttpConnection, HttpServletRequest, HttpSession 등
컴포넌트와 컨테이너
컴포넌트는 애플리케이션 또는 애플리케이션의 일부를 말한다. 컨테이너는 컴포넌트가 실행되고 있는 격리된 공간을 말한다. 컨테이너는 생애주기, 보안, 트랜잭션 등 컴포넌트를 위한 서비스를 제공한다.
ex) JSP의 컨테이너 Tomcat, Jetty모의객체를 사용하지 않고 실제 컨테이너에서 필요한 객체와 메서드에 직접 접근하여 테스트를 배포하고 실행하는 방식을 컨테이너를 활용한 테스트라고한다.
컨테이너를 활요한 테스트 구현 전략
서버측과 클라이언트측 두가지 접근 방식으로 나뉜다.
1. 서버 측에서 컨테이너와 단위 테스트를 제어하여 테스트
2. 클라이언트 측에서 테스트 클래스를 실행 => 서버 측에서 동일한 테스트 케이스 호출 => 도메인 객체 테스트 => 결과를 클라이언트에 반환
컨테이너를 활용한 테스트의 단점
1. 특별한 도구가 필요하다.
: 테스트 대상 API에 맞는 특별한 컨테이너가 필요하다.
(서블릿을 위해 Tomcat, Jetty나 EJB를 위해 JBoss가 필요)
2. IDE 지원이 나쁘다.
: 대부분의 테스트는 내장 컨테이너에서 Maven이나 Gradle을 통해 실행할 수 있으며 지속적 통합을 위해 서버에서 빌드를 수행할 수 있다.
3. 실행 시간이 너무 길다.
: 컨테이너를 구동하고 관리하는데에 시간을 많이 잡아먹는다. 컨테이너의 종류에 따라 시간과 메모리 오버헤드도 달라진다.
4. 구성하기 복잡하다.
: 테스트를 수행하기 위해 애플리케이션을 컨테이너에서 실행할 수 있는 war파일이나 jar파일 등으로 패키징하고 배포해야한다.
물론 같은 작업을 상용 환경에서 수행하게 될 것이니, 해당 과정을 빌드의 한 부분으로 자동화해놓고 테스트 목적으로 재사용하는 방식으로 활용할 수 있다. 패키징과 배포를 자동화하는 것은 테스트나 운영 모두에 도움이되는 전략이고 지속적 통합을 용이하게 만든다.
Arquillian?
자바로 컨테이너를 활용한 테스트를 실행하기 위해 사용하는 프레임워크로 크게 세가지 요소로 구성된다.
- JUnit 같은 테스트 runner
- WildFly, Tomcat, ClassFish, Jetty 등의 컨테이너
- 컨테이너 리소스나 빈을 테스트 클래스에 주입하는 테스트 인리처(test enricher)
Arquillian을 사용하면 컨테이너, 배포, 프레임워크 초기화 등을 관리하는 부담이 최소화된다.
Arquillian은 자바 EE 애플리케이션을 테스트하기위한 프레임워크이다.
그러나 공식적으로 JUnit4까지만 지원을하고 JUnit5는 아직 지원하지않는 상태이다.
'DEV > ETC' 카테고리의 다른 글
소프트웨어 테스트 품질 (0) 2024.07.08 소프트웨어 테스트 원칙과 유형 (0) 2024.07.04 [Git] git 커밋 메시지 규칙 (0) 2024.06.12 [Architecture] 헥사고날 아키텍처(Hexagonal Architecture) (ft. 계층형 아키텍처, 클린 아키텍처, DDD) (2) 2024.06.05 [Architecture] MA와 MSA 개념 / 장단점 / 차이점 (0) 2024.05.30