문제

저는 단위 테스트를 구현하려고 노력해 왔으며 현재 다음을 수행하는 일부 코드가 있습니다.

  1. 쿼리 외부 데이터베이스, 피드 테이블에로드
  2. 피드 및 데이터 테이블의 델타 인보기, 피드 테이블과 일치하도록 데이터 테이블을 업데이트하는보기

내 단위 테스트 전략은 다음과 같습니다.

나는 자유롭게 조작할 수 있는 테스트 데이터베이스를 가지고 있습니다.

  1. setUP()에서 테스트 데이터베이스에 일부 데이터를 로드합니다.
  2. 테스트 DB를 소스로 사용하여 코드를 실행합니다.
  3. 데이터 테이블을 검사하여 개수와 특정 레코드의 존재 여부를 확인합니다.
  4. 명확한 테스트 DB, 다른 데이터 세트 로드
  5. 코드를 다시 실행
  6. 데이터 테이블을 다시 검사

분명히 특정 레코드를 추가, 삭제, 업데이트해야 한다는 것을 알 수 있도록 소스 DB 설정에 로드하는 데이터 세트가 있습니다.

좀 번거로운 것 같은데 더 쉬운 방법이 없을까요?어떤 제안이 있나요?

도움이 되었습니까?

해결책

델타를 생성하는 뷰를 테스트하려는 의도입니까, 아니면 코드가 뷰에 대한 응답으로 올바르게 추가, 삭제 및 업데이트되는지 테스트하려는 것입니까?

뷰를 테스트하려면 다음과 같은 도구를 사용할 수 있습니다. DB단위 수동으로 계산한 델타의 다양한 데이터로 피드와 데이터 테이블을 채웁니다.그런 다음 각 테스트에 대해 뷰가 일치하는 집합을 반환하는지 확인합니다.

뷰에서 감지된 차이점에 코드가 어떻게 반응하는지 테스트하려면 데이터베이스 액세스를 추상화하려고 합니다.결과 집합(또는 POJO/DTO 목록)을 전달하고 추가할 매개 변수 개체 배열(또는 POJO) 목록을 반환할 수 있는 Java 메서드를 상상해 보겠습니다.다른 방법은 제거 및 업데이트할 항목에 대한 diff 목록을 구문 분석합니다.그런 다음 모의 결과 세트 또는 pojo를 생성하여 코드에 전달하고 올바른 매개변수가 반환되는지 확인할 수 있습니다.데이터베이스를 건드리지 않고 모두 가능합니다.

핵심은 프로세스를 여러 부분으로 나누고 각 부분을 가능한 한 독립적으로 테스트하는 것입니다.

다른 팁

DbUnit 귀하의 요구를 충족시킬 것입니다.주의해야 할 한 가지는 로깅 Facade로 JCL 대신 SLF4J를 사용하도록 전환했다는 것입니다.로깅을 JCL로 전달하도록 SLF4J를 구성할 수 있지만 Maven DbUnit을 사용하는 경우 기본적으로 Nop 로그 공급자를 빨아들이므로 제외를 사용해야 한다는 경고를 받습니다. 블로그에 올렸던 최근에 이 갈등에 대해.

저는 DbUnit을 사용하지만 DB에 대해 테스트하지 않으려고 매우 열심히 노력합니다.데이터베이스에 대한 테스트는 데이터베이스 인터페이스 테스트 목적으로만 존재해야 합니다.그래서 나머지 모든 테스트에 사용할 데이터를 설정할 수 있는 모의 Db 연결이 있습니다.

이미 제안된 DBUnit 외에도 다음을 살펴보고 싶을 수도 있습니다. 유니틸.DBUnit을 사용하지만 그 이상을 제공합니다(사이트 인용).

  • 증분, 반복 가능 및 사후 처리 스크립트를 지원하는 데이터베이스의 자동 유지 보수
  • 제약 조건을 자동으로 비활성화하고 시퀀스를 최소값으로 설정합니다.
  • Oracle, Hsqldb, MySql, DB2, Postgresql, MsSql 및 Derby 지원
  • 테스트 데이터베이스 연결 설정 단순화
  • DBUnit을 사용한 테스트 데이터의 간단한 삽입 * 트랜잭션에서 테스트 실행
  • JPA 엔티티 관리자 최대 절전 모드, 탑 링크 및 * 최대 절전 모드 세션 및 세션에 대한 제작 및 주입
  • 데이터베이스와 함께 JPA 엔티티 / 최대 절전 모드 맵핑 객체의 매핑을 자동으로 테스트합니다.

Maven을 사용하는 경우 한 가지 옵션은 다음을 사용하는 것입니다. SQL-메이븐-플러그인.이를 통해 Maven 빌드 주기 동안 데이터베이스 초기화/채우기 스크립트를 실행할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top