2012-01-10 2 views
4

maven 통합 테스트 단계에서 임베디드 부두 컨테이너에서 시작된 REST 웹 서비스 프로세스에 대해 통합 테스트를 실행하려고합니다. 그만큼 효과가 있습니다.통합 테스트 방법 내장 된 Jetty 컨테이너에서 실행되는 인 메모리 DB에서 HSQL 데이터를 setUp() 조작합니까?

메모리 내 HSQL DB를 사용하도록 서버를 구성하여 각 JUnit 테스트가 데이터베이스를 설정하고 (테이블 생성, 레코드 삽입), 기록을 삭제할 수 있습니다 (레코드 삭제). 임베디드 부두 컨테이너에 의존하지 않았다 (단위 테스트를 실행할 때 실행되는

jdbc.driver.class.name=org.hsqldb.jdbcDriver 
jdbc.url=jdbc:hsqldb:mem:mytestdb 
db.user=sa 
db.pass= 

:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="#{applicationProperties['jdbc.driver.class.name']}" /> 
    <property name="url" value="#{applicationProperties['jdbc.url']}" /> 
    <property name="username" value="#{applicationProperties['db.user']}" /> 
    <property name="password" value="#{applicationProperties['db.pass']}" /> 
</bean> 

속성 :

웹 서비스 프로세스의 애플리케이션 컨텍스트는 다음과 같은 데이터 소스를 정의),이 설정은 정상적으로 작동했습니다. 이 내 서버가 부두에서 시작될 때 생성되는 데이터 소스 내 단위로 액세스 할 수 없습니다 -apparently 때문에 작동하지 않습니다, 내 통합 테스트와

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationContext; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

@RunWith(SpringJUnit4ClassRunner.class) 
public class TestBase { 

    @Autowired 
    protected ApplicationContext context; 

    ... 

    @Before 
    public void setUp() { 
     DriverManagerDataSource ds = (DriverManagerDataSource) context.getBean("dataSource"); 
     // Create tables 
     // Insert records 
    } 
} 

: 각 단위 테스트는 데이터베이스를 생성하고, 그래서 같은 기록을 삽입 테스트 클래스는 데이터를 삽입/삭제합니다.

내 질문 : 내 단위 테스트 설정() 메서드는 데이터를 조작 할 수 있습니다

  • 어떻게 HSQL 내 포함 된 부두 컨테이너에서 구성 할 수있는 그래서?

답변

0

내 자신의 해결책을 게시하면 다른 사람에게 유용합니다.

좋아, 그래서 내가 바라는대로이 문제를 해결하지 못했습니다.

내 통합 테스트에서 서버에서 실행중인 메모리 내 HSQL 데이터베이스에 데이터를 삽입하는 방법을 찾지 못했습니다.

이렇게하면 내 문제를 이런 식으로 해결하는 대신 서버 자체가 시작시 데이터를로드하게됩니다. src/test에서 메모리 내 HSQL DB를 시작하는 DB 초기화 서블릿을 추가 한 다음 INSERT 문을 실행하여 테스트 데이터를로드합니다. 그런 다음 src/main/webapp에서 src/test/webapp (이 작업을 수행하지 않아도 됨)에 web.xml을 복사하고 시작시로드 할이 테스트 서블릿을 추가했습니다.

그래서 테스트 자체는 실제로 테스트 사이에 데이터를 삽입하지 않지만 새 테스트 서블릿에서 doget() 메소드를 호출하여 메모리 내 데이터베이스를 새로 고칩니다.