2012-09-20 3 views
0

현재 애플리케이션 용 테스트를 만들어야합니다. 나는 그것을 달성하기 위해 "DBUnit를"을 사용하고 지금이 개 데이터 세트를 비교해야합니다 내가 예상 결과는 내가 읽은 파일의 해당 FlatXML에 기록 된 QueryDataSet
2)를 얻을 데이터베이스에서dbunit와 2 개의 데이터 세트를 비교합니까?

1) 기록을 또한 데이터 세트로

기본적으로 2 개의 데이터 세트를이 방식으로 비교할 수 있습니다.

이제 문제는 타임 스탬프가있는 열입니다. 예상 된 데이터 세트와 결코 맞지 않습니다. 나는 그것들을 비교할 때 그것들을 무시하고 싶다. 그러나 그것이 내가 원하는 방식으로 작동하지 않는다.

열 필터를 추가하고 ignoreColumns를 추가하여 각 테이블을 자체적으로 비교할 때도 작동합니다. 그러나,이 approch는 많은 테이블이 비교에서 사용되며, 많은 코드를 추가하도록 강요하므로, 결국 비대 해집니다. null 값을 가진 필드에도 똑같이 적용됩니다.

모든 테이블의 맨 처음 열만 비교할 수있는 가능성이있는 솔루션이 될 수도 있습니다. 열 이름으로 이름을 지정하지 않고 그것의 란 색인에. 그러나 내가 찾을 수있는 것은 아무것도 없다.

어쩌면 내가 누락되었거나 어쩌면 각 테이블을 자체적으로 비교하는 것 외에 다른 방식으로 작동하지 않을 수 있습니까?

답변

2

완료를 위해 몇 가지 추가 정보를 게시해야합니다. 실제로 이전에 게시 된 솔루션은 데이터베이스에서 데이터를 읽는 프로세스가 나를 트랩 한 것처럼 전혀 작동하지 않습니다.

"QueryDataset"을 사용하는 프로세스는 데이터베이스에서 데이터를 읽고 데이터 세트로 저장했지만 데이터는이 데이터 세트에서 더 이상 액세스 할 수 없었습니다 (디버그 모드에서 데이터를 볼 수 있음). 당신이 시도하더라도

QueryDataSet qds = new QueryDataSet(connection); 
qds.addTable(“specificTable”); 
qds.getTable(„specificTable“).getRowCount(); 

: 대신 전체 작업이 실패를 생산하는 org.dbunit.database.ForwardOnlyResultSetTable.getRowCount에서 UnsupportedOperationException가 (ForwardOnlyResultSetTable.java:73)

예제 코드로 실패 그것은이 방법은 실패 :
이 줄을 추가 할 필요가 추출 작업을하기 위해

IDataSet tmpDataset = connection.createDataSet(tablenames); 
tmpDataset.getTable("specificTable").getRowCount(); 

(t을 그는 두 번째 것) :
IDataSet tmpDataset = connection.createDataSet (tablenames);
IDataSet actualDataset = 새 CachedDataSet (tmpDataset);

좋아요,이 곳 문서화되지 않았 음을 ...

하지만 그건 전부는 아닙니다 : 이제 당신은 확실히 하나는 "QueryDataSet"뿐만 아니라를 수행 한 후이 줄을 추가 할 수 있다고 생각 ...하지만 것 ! 여전히 작동하지 않습니다! 그것은 여전히 ​​같은 예외를 던질 것입니다! 그것은 나에게 어떤 의미가 없으며 나는 그걸로 많은 시간을 낭비했다 ...

xml 파일에서 읽은 데이터 세트에서 데이터를 추출하는 것이 아무 문제없이 작동한다는 점에 유의해야한다. 이 성가심은 데이터베이스에서 직접 데이터 세트를 가져 오려고 할 때 발생합니다.

당신은 당신이 예상되는 XML 파일에있어 열만을 비교하는 다음과 같이 위의 후 계속 수행 한 경우 :

// put in here some code to read in the dataset from the xml file... 
    // and name it "expectedDataset" 
    // then get the tablenames from it... 
    String[] tablenames = expectedDataset.getTableNames(); 

    // read dataset from database table using the same tables as from the xml 
    IDataSet tmpDataset = connection.createDataSet(tablenames); 
    IDataSet actualDataset = new CachedDataSet(tmpDataset); 

    for(int i=0;i<tablenames.length;i++) 
    { 
     ITable expectedTable = expectedDataset.getTable(tablenames[i]); 
     ITable actualTable = actualDataset.getTable(tablenames[i]);   
     ITable filteredActualTable = DefaultColumnFilter.includedColumnsTable(actualTable, expectedTable.getTableMetaData().getColumns()); 
     Assertion.assertEquals(expectedTable,filteredActualTable); 
    } 
0
또한이 형식을 사용할 수 있습니다

:

// Assert actual database table match expected table 
String[] columnsToIgnore = {"CONTACT_TITLE","POSTAL_CODE"}; 
Assertion.assertEqualsIgnoreCols(expectedTable, actualTable, columnsToIgnore);