2014-04-03 4 views
3

내 동료 프로그래머를위한 질문. SQL 문이 실제로 테이블을 자르지 않고 테이블을 잘라내는지 테스트해야합니다. 잘라 내기 전에 제약 조건을 비활성화해야한다는 것을 알고 있지만 테이블에 실제로 영구적 인 손상을주지 않으면 서 실제로 테이블을 잘라내는 방법을 잃어 버렸습니다.JUnit, 테이블 잘라내기를 테스트하는 방법

미안 이미 요청한 경우 죄송합니다. 미리 감사드립니다. 편집 : Maven, MyBatis, Oracle DB 및 Spring (Aspect, Batch)을 사용하고 있습니다. 또한 코드는 작동하지만 JUnit의 컨텍스트 내에서 메서드를 테스트해야합니다. 내가 어떻게 주장할지는 아직 또 다른 문제이다.

+0

귀하의 DBMS에 따라 다릅니다. Postgres에서 잘라 내기를 수행하고 테이블이 비어 있는지 확인한 다음 롤백을 수행하여 잘라내기를 되돌릴 수 있습니다. –

+0

테스트를 작성할 때 데이터베이스 상호 작용을 수행하려면 일반적으로 테스트 용으로 별도의 스키마를 만들고 각 테스트 사이에 스키마를 삭제하고 다시 생성 할 수도 있습니다. 이 방법은 내가 실제로 테이블에 해를 입히는 지 실제로는 신경 쓰지 않습니다. –

+0

프로그램이 DB에 올바른 SQL 명령을 발행했는지 또는 SQL 명령이 DB에서 올바르게 작동하는지 테스트 하시겠습니까? –

답변

4

Derby와 같은 단위 테스트를 위해 inmemory 데이터베이스 엔진을 사용할 것을 고려하십시오. 이렇게하면 실제 데이터를 손상시키지 않으면 서 테이블을자를 수 있습니다. 좋은 방법은 생산 및 테스트 목적으로 다른 드라이버를 사용하는 것입니다. 이 방법은 Hibernate와 같은 ORM 프레임 워크를 사용하는 경우에 특히 편리합니다.

2

메모리얼 데이터베이스에서 Alexey와 동의하는 것은 좋지만 실제 데이터베이스에서 코드를 테스트 할 것을 제안합니다. 그러나 (필자가 알고있는 한) 실제로 테이블을 잘라 내지 않고 실제로 작동하는지 테스트하는 방법은 없습니다.

데이터베이스 테스트에 대한 조언.

  1. 스키마 당신은 단순히 당신이 빈 데이터베이스 인스턴스
  2. 을 회전 자동화 할 수 있는지 확인 인스턴스에 업로드하고 서비스/응용 프로그램
  3. 에 대한 작업 프로덕션 환경을 가질 수 버전 파일에 있는지 확인
  4. 프로덕션 환경의 스냅 샷을 테스트에 사용할 수 있습니다.

이러한 작업을 수행했다면 프로덕션 환경으로 이동하지 않고도 데이터베이스에 대한 테스트를 매우 잘 설정할 수 있습니다.

나는 이처럼 뭔가 작동하는 프로덕션 스키마를 사용하여 실제 postgresql 인스턴스에 대해 많은 자동화 된 테스트를 작성했습니다.

  1. postgresql 서버를 회전하십시오.
  2. 스키마를 데이터베이스에 업로드하십시오.
  3. 테스트 데이터를 삽입하십시오.
  4. 일부 테스트 실행.
  5. postgresql 서버를 강제 종료하십시오.
  6. 파일을 정리하십시오.

UPDATE :

포스트그레스 프로세스를 시작

http://www.postgresql.org/docs/9.3/static/app-initdb.html

  • 을 initdb를 사용하면

    1. 데이터베이스 파일을 포함하는 폴더를 생성 할 데이터베이스를 회전하고 그 파일들을 가리 키십시오. http://www.postgresql.org/docs/8.2/static/server-start.html

    postgresql.conf 및 pg_hba.conf의 보안 설정을 조정해야 할 수도 있습니다 (자동화해야합니다).

  • +0

    postgresql 서버를 "스핀 업 (spin up)"한다는 것은 무엇을 의미합니까? – zeontestpilot

    +0

    업데이트를 추가했습니다. 희망이 도움이됩니다. –

    관련 문제