2012-02-03 4 views
6

DbUnit을 사용하도록 단위 테스트 환경을 설정하려고합니다.기본 키가없는 테이블에서 DbUnit 사용

제어하려고 시도하는 테이블에 기본 키가 없기 때문에 몇 가지 문제가 있습니다. 나는 org.dbunit.dataset.NoPrimaryKeyException을 받고있다.

는 여기 http://dbunit.wikidot.com/noprimarykeytable을 단계를 수행했지만 어떻게 사용합니까 : 내 각 테이블에 대한

connection.getConfig().setProperty("http://www.dbunit.org/properties/primaryKeyFilter", new MyPrimaryKeyFilter("A1")); 

? 예를 들어

, 나는 다음과 같은 데이터베이스있다 :

CREATE TABLE `NO_PK1` (
    `A1` int(11) NOT NULL, 
    `A2` varchar(50) default NULL 
); 

<?xml version="1.0" encoding="UTF-8"?> 
<dataset> 
    <NO_PK1 A1="1" A2="Test1" /> 
    <NO_PK1 A1="2" A2="Test2" /> 
    <NO_PK1 A1="3" /> 
</dataset> 

CREATE TABLE `NO_PK2` (
    `B1` int(11) NOT NULL, 
    `B2` varchar(50) default NULL 
); 

<?xml version="1.0" encoding="UTF-8"?> 
<dataset> 
    <NO_PK2 B1="1" B2="Test1" /> 
    <NO_PK2 B1="2" B2="Test2" /> 
    <NO_PK2 B1="3" /> 
</dataset> 

CREATE TABLE `NO_PK3` (
    `C1` int(11) NOT NULL, 
    `C2` varchar(50) default NULL 
); 

<?xml version="1.0" encoding="UTF-8"?> 
<dataset> 
    <NO_PK3 C1="1" C2="Test1" /> 
    <NO_PK3 C1="2" C2="Test2" /> 
    <NO_PK3 C1="3" /> 
</dataset> 

어떻게이 경우에 connection.getConfig().setProperty("http://www.dbunit.org/properties/primaryKeyFilter", new MyPrimaryKeyFilter("A1"));를 다시 작성할 수 있습니까?

조언에 대해 감사드립니다.

답변

5

MyPrimaryKeyFilter가 스키마의 모든 테이블을 처리해야합니다. 이 예제에서는 하나의 테이블 만 있으므로 제공된 간단한 필터 클래스가 올바르게 작동합니다. 귀하의 경우에는, 나는 아마지도 포함하는 테이블을 해당 클래스를 변경 것 -> PK 컬럼 이름 매핑 : 다음

class MyPrimaryKeyFilter implements IColumnFilter { 
     private Map<String, String> pseudoKey = null; 

     MyPrimaryKeyFilter(Map<String, String> pseudoKey) { 
      this.pseudoKey = pseudoKey; 
     } 

     public boolean accept(String tableName, Column column) { 
      return column.getColumnName().equalsIgnoreCase(pseudoKey.get(tableName)); 
     } 

    } 

과 함께지도를 설정 {NO_PK1 -> A1}, {NO_PK2 -> B1} , {NO_PK3 -> C1} 항목이 있습니다.

+0

감사합니다. 그건 의미가 있습니다. 테이블 중 하나에 하나 이상의 필드로 구성된 키가 있다면 어떨까요? – mip

+1

나는지도를 >으로 변경하고 포함 체크를 할 수 있다고 생각한다. – slushi

+0

그래서 return 문은'return pseudoKey.get (tableName) .contains (column.getColumnName()); '가됩니다. – mip