2

dBUnit を使用しており、実際の DB データセットを使用して、事前定義された FlatXmlDataSet の行をアサートしようとしています。問題は、検証コード フィールドの getValue が、そのデータが FlatXmlDataSet から取得された場合は文字列を返し、実際のライブ データベースから取得された場合は整数として返すことです。これは、文字列以外のすべてのデータ型に当てはまります。比較する前にすべてを文字列に変換する何かを書くことはできますが、より良い方法はありますか?

私のコード:

    IDataSet initialSet = setupDBWithData("test.xml", true);
    ITable initialTable = initialSet.getTable("USER");

    String response = doTestSendVerificationPin();
    assertOKResponse(response);

    ITable userTable = _databaseTester.getConnection().createTable("USER");

    // Make sure old user row is left unchanged
    assertRowsEqual(initialTable, 0, userTable, 0);

...(さらに下へ)

protected void assertRowsEqual(ITable expected, int rowExpected, ITable actual, int rowActual) throws Exception
{
    ITableMetaData metaData = expected.getTableMetaData();
    Column [] cols = metaData.getColumns();

    for (int i = 0; i < cols.length; i++)
    {
        String colName = cols[i].getColumnName();
        assertEquals(expected.getValue(rowExpected, colName), actual.getValue(rowActual, colName));
    }

}

これは、私が丸呑みする test.xml です。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE dataset SYSTEM "../Tests/testdata/common/some.dtd"> 

<dataset>
  <USER ID="132" FIRST_NAME="Joe" LAST_NAME="Bob" VERIFICATION_CODE="1869" />
</dataset>
4

2 に答える 2

2

これがあなたの質問に正確に答えていない場合は申し訳ありませんが、これは DBUnit を使用する一種の珍しい方法のように思えます。通常、DBUnit を使用してデータを DB にロードし、SQL を使用してデータベースにクエリを実行し、それを他の既知の結果と比較します。DBUnit IDataSet をアサーションの一部として比較しようとする人を見たことがありません。DBUnit がこのように使用されることを意図しているとは思いません。

于 2009-08-14T04:14:19.403 に答える
1

インスタンスflat-xmlを読んでいることを意味するフォーマットを使用していると思います。FlatXmlDataSet私が正しければFlatXmlDataSetBuilder、データベースから読み取ったデータセットからファイルから読み取ったデータセットにデータセット メタデータをコピーするために使用できます。

flat-xml別のアプローチは、いくつかの制限があるため、DTD または本格的なデータセット形式を使用することです。

于 2012-08-28T16:26:11.167 に答える