2011-12-07 5 views
3

기존 데이터베이스를 JUnit 테스트 데이터의 소스로 활용하고 싶습니다. 일부 시나리오는 매우 복잡하며 수동으로 모든 개체를 설정하는 번거 로움이 있습니다.JUnit 테스트의 데이터베이스 결과를 기록하고 재사용하는 방법

DAO가 데이터베이스에서 반환하고 파일에 기록하는 실제 SQL 연결 개체를 직렬화 할 기존 DAO의 데코레이터 측면에서 생각하고 있습니다.

JUnit 테스트 케이스를 1 회 기록 모드로 실행하고 그 이후에는 항상 기록 된 데이터를 재생하면서 데이터베이스로 이동하지 않는 라인이 있습니다.

Java에서이 프로세스를 쉽게 수행 할 수있는 프레임 워크가 있습니까? 아니면 직접 구현해야합니까?

답변

2

당신은 로깅 JDBC 프록시를 설정할 수 있습니다 (같은 JdbcProxy, log4jdbc, jdbcdslog 또는 DbdaTestDriver) 응용 프로그램과 쿼리 및 결과 집합을 저장하는 데이터베이스 사이의 반환. DAO 데코레이터를 작성하고 삽입 할 필요가 없습니다.

나중에 로깅 된 데이터를 사용하여 테스트에 사용할 스텁 데이터베이스 연결을 설정할 수 있습니다. JdbcProxy와 DbdaTestDriver는이를 수행하는 내장 함수를 가지고 있습니다.

[편집]이 프로젝트는 나중에 재생에 JDBC 작업을 기록 할 수 있습니다 : http://sourceforge.net/projects/dbdatestdriver/

+0

JdbcProxy는 좋은 해결책 인 것처럼 보이지만 버려진 것 같습니다. – OliverS

+0

은 재생 기능이있는 또 다른 하나를 찾았습니다 : http://sourceforge.net/projects/dbdatestdriver/ – socha23

0

테스트 데이터베이스를 사용하십시오. Jailer을 사용하여 테스트에 사용할 데이터를 추출하십시오. 테스트 데이터베이스 설정에는 DBUnit을 사용하십시오.

+0

DB 호출은 벤더에 고유 한 저장된 procs이므로 테스트 DB를 실제로 사용할 수 없습니다. – OliverS

3

가 직렬화 프레임 워크를 사용하여 (하나 추악한 내장 된 자바 Serialization API 나 XML 또는 JSON 매퍼) 콩을 변환 파일로 그리고 뒤로. 현대의 많은 프레임 워크는 작업을 수행하는 데 필요한 힌트가 거의 없습니다.

옵션 :

JSON : Gson 또는 Jackson
XML : Simple 또는 Woodstox

그런 식으로, 당신은 모든 JDBC에 갈 필요가 없습니다. 나는 항상 데이터베이스 테스트를 피하려고 노력한다. 벤더가 그렇게해야한다. 내 테스트는 내가 인지, DB를 정확히으로 테스트하는지 테스트합니다. 이를 위해서는 쿼리 작성자가 올바른 SQL 문자열을 생성하는지 확인해야합니다 (단, 데이터베이스에 보낼 필요는 없습니다).

DB를 테스트 할 때 (실제로 JDBC 드라이버를 통해 데이터를 전송할 때) 테스트 케이스는 가능한 작고 단순해야합니다. 필자는 테스트 케이스와 생산 데이터가없는 특정 테스트 데이터베이스에 대해 항상 테스트를 수행합니다. 차이점은 테스트 데이터베이스의 각 행에는 목적이 있다는 것입니다. 프로덕션 데이터베이스에는 100 만 건의 사례 B가 한 번 있고 C가 누락 된 사례는 매우 드물다.

"프로덕션 데이터베이스 복사본에 대해 테스트하고 싶습니다."라고 말하는 것은 "내가하는 작업을 모르기 때문에 많은 작업을 수행합니다."라고 말하면됩니다.

테스트 데이터베이스는 첫 번째 테스트가 실행될 때 처음부터 다시 작성됩니다 (정적 코드 블록은 여기에 친구입니다). 그렇게하면 사람들이 아무 것도 사용하지 못하게됩니다. 각 개발자는 자신의 인스턴스를 가져옵니다.

복잡한 저장 프로 시저가있는 경우 다른 Java 코드처럼 취급하십시오. 가장 간단한 테스트 데이터로 각 경로를 테스트하십시오.

모든 규칙에는 단지 두 가지 목표 만 있습니다. 실제 데이터베이스를 강타한 테스트를 작성하기 전에 모든 사람이 두 번 생각하게하고 그 다음에 결정하십시오. 두 번째 목표 : 테스트에서 데이터베이스를 사용하는 경우 대부분 성공합니다.

관련 문제