Java データベース コードの別のプログラマーから継承したプロジェクトのテスト スイートを修正しようとしています。プロジェクト自体は DB 用に hibernate と MySQL を使用していますが、テスト ケースの目的で dbunit が使用されています。Hibernate のセッション ファクトリを正しくロードして初期化できますが、Eclipse でテストを実行しようとすると、"org.dbunit.dataset.NoSuchTableException: mytablename" という例外が発生し続けます。
すべてのファイルが適切な場所にあり、dbunit に渡す実際の XML ファイルに問題がないことはわかっています (FlatXmlDataSet タイプを使用しています)。データベース テスト ケースの基本クラスの setUp() メソッドは次のようになります。
@Override
protected void setUp() throws Exception {
super.setUp();
IDataSet dataSet = new FlatXmlDataSet(new File(mDataFile));
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
IDatabaseConnection connection = new DatabaseConnection(session.connection());
DatabaseConfig config = connection.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
session.getTransaction().commit();
}
CLEAN_INSERT データベース操作の直後に、これがどのテーブルであるかに関係なく、XML ファイルの最後のテーブルについて不平を言う例外がスローされます。DTD と XML スキーマを手作業と Eclipse で検証し、2 つのファイル内のテーブルの順序が一致していることを確認しました。これらのファイルをここに貼り付けたくはありませんが (多くの検索置換が必要になるため)、dbunit の例を調べて、構文が一致することを確認したことを信じてください。
何が間違っている可能性がありますか?私は何時間もグーグルで検索してきましたが、何も役に立ちません。
編集:言い忘れたことの 1 つは、スローする行にブレークポイントを配置すると、dataSet の構造を調べて、すべてのテーブルとすべてのテスト データが実際にそこにあることを確認できることです。したがって、少なくともその部分は正しく機能しているようです。
@Bogdan: うーん... いい考えだ。通常の INSERT でデータをロードしてみます。@sleske: また、良い提案です。ヒントをありがとう; うまくいけば、これは私をこの問題を解決するための正しい道に導きます.