데이터베이스 코드용 JUnit
-
09-06-2019 - |
문제
저는 단위 테스트를 구현하려고 노력해 왔으며 현재 다음을 수행하는 일부 코드가 있습니다.
- 쿼리 외부 데이터베이스, 피드 테이블에로드
- 피드 및 데이터 테이블의 델타 인보기, 피드 테이블과 일치하도록 데이터 테이블을 업데이트하는보기
내 단위 테스트 전략은 다음과 같습니다.
나는 자유롭게 조작할 수 있는 테스트 데이터베이스를 가지고 있습니다.
- setUP()에서 테스트 데이터베이스에 일부 데이터를 로드합니다.
- 테스트 DB를 소스로 사용하여 코드를 실행합니다.
- 데이터 테이블을 검사하여 개수와 특정 레코드의 존재 여부를 확인합니다.
- 명확한 테스트 DB, 다른 데이터 세트 로드
- 코드를 다시 실행
- 데이터 테이블을 다시 검사
분명히 특정 레코드를 추가, 삭제, 업데이트해야 한다는 것을 알 수 있도록 소스 DB 설정에 로드하는 데이터 세트가 있습니다.
좀 번거로운 것 같은데 더 쉬운 방법이 없을까요?어떤 제안이 있나요?
해결책
델타를 생성하는 뷰를 테스트하려는 의도입니까, 아니면 코드가 뷰에 대한 응답으로 올바르게 추가, 삭제 및 업데이트되는지 테스트하려는 것입니까?
뷰를 테스트하려면 다음과 같은 도구를 사용할 수 있습니다. DB단위 수동으로 계산한 델타의 다양한 데이터로 피드와 데이터 테이블을 채웁니다.그런 다음 각 테스트에 대해 뷰가 일치하는 집합을 반환하는지 확인합니다.
뷰에서 감지된 차이점에 코드가 어떻게 반응하는지 테스트하려면 데이터베이스 액세스를 추상화하려고 합니다.결과 집합(또는 POJO/DTO 목록)을 전달하고 추가할 매개 변수 개체 배열(또는 POJO) 목록을 반환할 수 있는 Java 메서드를 상상해 보겠습니다.다른 방법은 제거 및 업데이트할 항목에 대한 diff 목록을 구문 분석합니다.그런 다음 모의 결과 세트 또는 pojo를 생성하여 코드에 전달하고 올바른 매개변수가 반환되는지 확인할 수 있습니다.데이터베이스를 건드리지 않고 모두 가능합니다.
핵심은 프로세스를 여러 부분으로 나누고 각 부분을 가능한 한 독립적으로 테스트하는 것입니다.
다른 팁
저는 DbUnit을 사용하지만 DB에 대해 테스트하지 않으려고 매우 열심히 노력합니다.데이터베이스에 대한 테스트는 데이터베이스 인터페이스 테스트 목적으로만 존재해야 합니다.그래서 나머지 모든 테스트에 사용할 데이터를 설정할 수 있는 모의 Db 연결이 있습니다.
이미 제안된 DBUnit 외에도 다음을 살펴보고 싶을 수도 있습니다. 유니틸.DBUnit을 사용하지만 그 이상을 제공합니다(사이트 인용).
- 증분, 반복 가능 및 사후 처리 스크립트를 지원하는 데이터베이스의 자동 유지 보수
- 제약 조건을 자동으로 비활성화하고 시퀀스를 최소값으로 설정합니다.
- Oracle, Hsqldb, MySql, DB2, Postgresql, MsSql 및 Derby 지원
- 테스트 데이터베이스 연결 설정 단순화
- DBUnit을 사용한 테스트 데이터의 간단한 삽입 * 트랜잭션에서 테스트 실행
- JPA 엔티티 관리자 최대 절전 모드, 탑 링크 및 * 최대 절전 모드 세션 및 세션에 대한 제작 및 주입
- 데이터베이스와 함께 JPA 엔티티 / 최대 절전 모드 맵핑 객체의 매핑을 자동으로 테스트합니다.
Maven을 사용하는 경우 한 가지 옵션은 다음을 사용하는 것입니다. SQL-메이븐-플러그인.이를 통해 Maven 빌드 주기 동안 데이터베이스 초기화/채우기 스크립트를 실행할 수 있습니다.