2012-03-11 3 views
1

저는 최근 Spring/JPA/Hibernate/Maven 프로젝트를 인수했으며 Java EE 개발을 처음 접했습니다. 이 프로젝트를 실행하면 시작될 Tomcat에 의존하여 데이터베이스에 액세스 할 수 있습니다. 내가 이해하는 바로는 이것을 "Tomcat 컨테이너에서 실행 중"이라고합니다.Java EE 응용 프로그램이 Tomcat 컨테이너에서 실행되도록 설계된 경우 모든 통합 테스트를 비슷한 컨테이너에서 실행해야합니까?

간단한 통합 테스트가 작동하고 데이터베이스에 성공적으로 연결하는 데 문제가 발생했습니다. 사전 통합 테스트 단계에서 Tomcat을 실행하도록 POM을 설정 했으므로 통합 테스트는 실제 응용 프로그램과 정확히 동일한 방식으로 데이터베이스에 연결할 수 있습니다.

테스트 애플리케이션 컨텍스트에서 스프링 기본 연결을 통해 연결하는 것이 더 옳은가요? 내 스프링 테스트 컨텍스트에 대한 몇 가지 작업 데이터베이스 연결 코드를 게시 할 수있는 사람은 내 영웅이 될 것입니다. 필자는 온라인에서 찾은 예제로 어떤 행운을 빕니다.

+0

JEE 응용 프로그램을 개발할 때 왜 Spring을 사용하고 있습니까? – wintersolutions

+0

@PizzaPill : Spring은 JEE 응용 프로그램을위한 '프레임 워크'입니다 ... – home

+0

@home : 언제부터? JEE는 Spring imho를 대체 할 곳입니다. – wintersolutions

답변

1

JSP/Servlets + Spring + Hibernate 웹 컨테이너 구현에 대해 걱정할 필요가없는 다음 기술 스택으로 웹 응용 프로그램을 개발하는 경우. 완벽한 세계에서 모든 웹 컨테이너는 자바 웹 컨테이너의 사양으로 인해 같은 방식으로 동작하지만 현실에서는 그렇지 않습니다. 어쨌든 이것은 배포 엔지니어 또는 지원 팀의 문제입니다. 개발자는 테스트 환경으로 임베디드 모드에서 Jetty를 선호 할 수 있습니다. BTW : 응용 프로그램을 실행하려면 mvn jetty:run을 사용하십시오.

+0

웹 컨테이너에서 통합 테스트를 실행하는 것이 좋지만 Tomcat 대신 Jetty를 사용하는 것이 좋습니다. –

+0

예, 응용 프로그램 (비즈니스 계층 + DAO)과 데이터베이스 또는 다른 리소스의 통합을 테스트 한 경우 예. Unitils를 테스트하기 위해 통합/유닛 테스트를 제공하는 것이 매우 유용하고 쉬운 방법입니다. –

+0

http://unitils.org/tutorial-database.html –

1

실제 데이터베이스 인스턴스에 연결하는 테스트에 대한 약간의 반 패턴입니다. 대신 DBUnit과 HSQL 또는 H2와 같은 메모리 내장 데이터베이스를 사용하여 "실제"데이터베이스에 대한 네트워크 연결과 관계없이 테스트를 실행할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 이것이 왜 반 패턴인지에 대한 정보를 제공하거나 참고할 수 있습니까? 나는 실제 데이터베이스에 연결하는 것이 좋습니다. –

+1

@CFL_Jeff : 테스트 중에 데이터베이스의 정확한 상태를 명시 적으로 제어하지 않으면 안티 패턴 부분이 있습니다 (예 : 다른 devs와의 충돌 없음). 전개 환경의 사본을 사용하기 위해 DBUnit을 설정할 수 있습니다. 특정 데이터베이스에 특정한 SQL 확장을 사용하면 변경하지 않는 것이 더 나을 것입니다. 한 프로젝트에서, 나는 postgresql을 사용하여 전개하지만 H2 인스턴스를 테스트한다. 그것은 H2에서 복제되지 않은 postgresql의 멋진 확장 기능을 사용할 수 없다는 것을 의미하지만 새 테스트 환경을 쉽게 설정할 수 있다는 것과 속도가 테스트를 실행한다는 점을 좋아합니다. – ccoakley

+0

ccoakley는 내가하는 대부분의 동일한 이유를 언급합니다. 개인적으로 테스트에서 실제 DB를 사용하는 다른 문제는 DB가 다운되거나 동일한 네트워크에 있지 않고 액세스 할 수 없다면 쉽게 테스트를 실행할 수 없다는 것입니다. –

관련 문제