2012-09-07 3 views
0

XML을 사용하여 단위 테스트 데이터를 설정할 수있는 프레임 워크를 찾고 있습니다.XML에서 데이터베이스의 테스트 데이터 작성

웹 프런트 엔드가 하나 이상의 백 엔드 데이터베이스 서버에서 여러 테이블로 연결되는 많은 개발 작업을 수행합니다. 단위 테스트 목적으로 데이터를 메모리의 HSQLDB 테이블에 연결하고 그에 대한 DB 작업을 실행합니다. 빠른 속도와 적당한 단위 테스트 환경을 제공합니다.

Hibernate는 잘 작동한다. 나는 그저 단위 테스트를 위해 HSQLDB 사투리를 사용하고 있으며 프로덕션 환경에서 DB2 사투리를 사용하고 있으며 이들 사이의 차이점을 다룹니다.

저는 종종 SQL을 널리 사용하기 전에 프로덕션 환경에서 사용하던 레거시 테이블을 사용하고 있습니다. decimal(7,2) 필드가 많이 있습니다. 복합 키와 인덱스가 많이 (그리고 나는 많은 것을 의미한다). 이 테이블에이 두 필드로 구성된 복합 PK가있는 경우가 있는데, 실제로 다른 테이블의 복합 PK에 대한 FK이며,이 테이블과 관련된 몇 가지 다른 필드가 있습니다. 실제로는 YYYYMMDD 값인 decimal(8,0) 필드가 있습니다. 후자는 사실 복합 PK의 일부입니다.

나는이 환경에 익숙하지 않다. 이 테이블 중 일부는 수십 년 동안 생산에 사용되었습니다.

HSQLDB는이 모든 작업을 합리적으로 처리합니다. 이 모든 것들을 시뮬레이션 할 수 있습니다. 앞서 언급 한 decimal(8,0) -cum-date 필드 중 하나를 만들 수도 있습니다. 여기에서 현재 날짜를 가져 오거나 여기에 여러 요일을 더하거나 뺄 수 있으며 decimal(8,0) 값으로 변환 할 수 있습니다.

여러 SQL 파일을 작성하여이 작업을 수행합니다. 하나는 하나의 테이블에 대해 create table 문을 포함하고 하나는 해당 테이블에 데이터를 플러깅하는 insert 문을 포함합니다. JUnit은이를 실행하여 컨텍스트를 설정 한 다음 컨텍스트에 대해 실제 단위 테스트를 실행합니다. JUnit과 Spring을 사용하는 사람이라면 누구나이 설정에 익숙 할 것입니다.

문제는 하나의 파일에 PK 값을 하드 할당하고 나서 다른 파일의 레코드와 참조 무결성을 유지해야한다는 것입니다.

손으로.

유지 관리가 쉽지 않습니다. 다른 테스트 케이스를 추가하거나 기존 테스트 케이스를 수정하고 싶었 기 때문에 여러 파일에 걸쳐 참조를 유지 관리하는 데 소모 된 시간을 잃어 버렸습니다.

나는 create table 구문을 읽거나 구문 분석 할 수있는 프레임 워크를 원합니다. 또는 생성 된 테이블에서 스키마 데이터를 가져오고, 테이블 B의 이러한 필드가 실제로 복합체에 대한 FK라는 것을 알려주는 추가 설정을 취할 수 있습니다.

그런 다음 테이블 A의 PK, 내가 좋아하는 뭔가가있는 XML 파일을 생성하려는 경우 :

<table_A field1="value" field2="value" pkField1="value" pkField2="value"> 
    <table_B field1="value" field2="value" pkField3="value" /> 
    <table_B field1="value" field2="value" pkField3="otherValue" timeField="+5 minutes"/> 
</table_A> 

을하고, 테이블 A에서 하나 개의 레코드를 만들 필요에 따라 PK 값을 유의해야, 적절한 FK 값을 가진 두 개의 레코드를 테이블 B에 만들고 테이블 B의 두 번째 레코드를 time 필드는 이전 필드보다 5 분 늦습니다. 나는 명백하게 내가 원하는/필요로하지 않는 한 참조 테이블 값을 한 테이블 또는 다른 테이블에 배치 할 필요가 없다. 시스템은 필요에 따라 필드를 자동 생성하고 필요에 따라 FK로 전달할 수 있습니다.

저는 임의로 많은 레벨을 중첩 할 수 있기를 바랍니다.내 머리 꼭대기에서 나는 그림을 그릴 수있다 :

<table_a ...> 
    <table_b ... /> 
    <table_b ... /> 
    <table_b ... /> 
    <table_c ... /> 
    <table_c ... /> 
    <table_d ...> 
    <table_e ...> 
     <table_f ...> 
     <table_g ... /> 
     <table_g ... /> 
     <table_h ...> 
      <table_i ... /> 
      <table_i ... /> 
     </table_h> 
     </table_f> 
    </table_e> 
    </table_d> 
</table_a> 

내 기존 프로젝트 중 하나에서.

전체 데이터 세트를 9 개가 아닌 하나의 파일로 지정하고 싶습니다. 어떤 데이터가 다른 데이터에 연결되어 있는지 쉽게 알 수 있습니다. 이 모든 것이 적절한 테이블에 플러그인되며, 모든 테이블이 동일한 데이터 소스에 있지는 않습니다.

우리는 단위 테스트 단계에서 데이터베이스 작업을 대신하는 mock 객체로 많은 작업을했습니다. 코드가 실습 테스트 단계로 넘어 갔을 때 문제가 발생하여 데이터베이스와 상호 작용해야했습니다. 에르고, 모의 객체가 충분하지 않습니다. 데이터는 데이터베이스에 쓰여 져야하며, 시스템은 PK와 FK가 모두 서로를 올바르게 참조하도록 보장해야합니다.

질문 : 요컨대 : 위의 모든 것을 가능하게하는 프레임 워크를 아는 사람이 있습니까? 날짜/시간 계산 기능 포함? 다른 형식으로 변환 하시겠습니까?

답변

1

복잡한 테스트 데이터로 인해 고통을 완전히 없앨 수 있을지 모르지만, 적어도 DBUnit은 조금 쉽게 할 것입니다. 보고 바라 보는 가치가 있습니다.

+0

좋은 답변 일 것 같습니다. 아직도 그것으로 어지럽히고, 상대적인 날짜/시간 및 전환을 할 수 있는지 알아 내려고 노력했습니다. – Meower68

0

정확하게 요구 사항과 일치하는 도구를 모르지만 Red Gate's SQL Data Generator을 보았습니까? 레드 게이트는 아주 좋은 SQL 도구를 만듭니다. , mock 객체가 충분하지

인체 공학적;

는 내가 단위 테스트에서 모의 ​​개체를 사용하여 문제를 생각한다 데이터는 데이터베이스에 쓰여 져야하며, 시스템은 PK와 FK가 모두 을 서로 올바르게 참조하도록 보장해야합니다.

을 향상시킬 수 있습니다. 비즈니스 오브젝트가 오브젝트 관계에 기초한 적합한 유효성 검증을 갖는 경우 유닛 테스트가 훨씬 유용합니다.

+0

내가해야 할 일은 XML로부터 데이터를 생성하고 결코 혼란스럽게 만들지 않으면 안된다. 나중에 데이터를 수정하려면 나중에 생성 된 SQL을 수정해야합니다 (단위 테스트에서 실제로 필요하기 때문에) ** 및 ** 원본 소스 XML을 유지 관리하는 모든 사람들은 이러한 도구가 있어야합니다. – Meower68