2014-06-12 3 views
2

Sybase, Postgress, DB2 등과 같이 여러 데이터베이스와 통신하는 코드가 있으므로 각 모듈마다 서로 다른 쿼리를 사용하는 모듈이 있습니다. 유닛 테스트를하기 위해 H2와 JUnit으로 시작했습니다. Sybase, Postgres, DB2 등의 쿼리는 H2에서 작동하지 않기 때문에 H2가 수용 할 수있는 형식으로 기존 타겟 쿼리를 변환하기 시작했으며 RANK(), 파티션, 복잡한 가입 업데이트, 대소 문자 등의 많은 SQL 함수를 발견했습니다. 지원되지 않거나 H2에서 예상대로 작동하지 않습니다. 이 코드를 단위 테스트하는 방법은 무엇입니까?JDBC/데이터베이스 유닛 테스팅에 대한 베스트 프랙티스

각 db 모듈을 해당 데이터베이스로 테스트해야합니까? 예를 들어, Sybase 모듈에는 H2 대신 Sybase와 통신 할 단위 테스트가 있습니까, 아니면 데이터베이스 코드를 단위 테스트 할 때 H2를 사용해야합니까?

답변

4

예, 작성한 데이터베이스의 실제 인스턴스에 대해 데이터베이스 별 쿼리 모듈 각각을 테스트해야합니다. 몇 가지 정의에서 이것은 통합 테스트이지만 단위 테스트는 아니지만 호출 대상에 관계없이 테스트가 필요합니다.

나머지 코드의 단위 테스트를 실제 단위 테스트로 작성하고 데이터베이스 모듈을 스텁 아웃하여 실행중인 데이터베이스가 필요하지 않으며 어느 데이터베이스의 불일치에도 의존하지 않아야합니다 당신이 지원합니다.

대부분의 수락 또는 통합 테스트를 실제로 지원하는 데이터베이스 (모든 개발자가 자신의 컴퓨터에 보유하고있는 데이터베이스)에 대해 실행되도록 설정하십시오. 테스트를 위해서만 특수한 데이터베이스를 사용했다면 배우지 못한 데이터베이스에 대해 배웁니다. 각 데이터베이스 모듈을 실행하는 통합 테스트 (앱의 기본 사용 사례)가 적어도 하나는 있어야합니다.

단위 및 통합 테스트를 구성하여 특정 데이터베이스 모듈을 필요로하는 것을 제외한 모든 테스트를 실행할 수 있습니다 (그러나 원하는대로 실행하는 테스트 포함). 사용 빈도가 낮은 데이터베이스 모듈의 버그를 놓치지 않도록 모든 테스트를 실행하는 연속 통합 시스템을 설정하십시오.