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