0

XML を使用して単体テスト データをセットアップできるフレームワークを探しています。

私は、Web フロントエンドが 1 つ以上のバックエンド データベース サーバー上の複数のテーブルに接続する多くの開発を行っています。ユニット テストの目的で、データをメモリ内の HSQLDB テーブルにプラグインし、それに対して DB ops を実行します。高速で、適度に優れた単体テスト環境を提供します。

Hibernate もこれでうまく機能します。単体テストには HSQLDB ダイアレクトを使用し、本番環境では DB2 ダイアレクトを使用しており、それらの違いを扱っていることを伝えます。

多くの場合、SQL が広く使用される前に本番環境で使用されていたレガシー テーブルを使用しています。たくさんのdecimal(7,2)畑。複合キーとインデックスが大量に (つまり、LOTS という意味です)。このテーブルには、これら 2 つのフィールドで構成される複合 PK が含まれている場合があります。これは、実際には別のテーブルの複合 PK の FK であり、このテーブルに固有のその他のフィールドがいくつかあります。実際にdecimal(8,0)は YYYYMMDD 値であるフィールドがあります。後者は、実際には複合 PK の一部です。

この環境を改造することはできません。これらのテーブルの一部は、何十年も本番環境で使用されています。

HSQLDB は、これらすべてで十分に機能します。このすべてをシミュレートできます。前述の -cum-date フィールドの 1 つを作成することもできdecimal(8,0)ます。ここでは、現在の日付を取得し、複数日を加算/減算してdecimal(8,0)値に変換します。

これを行うには、複数の SQL ファイルを作成します。1 つはcreate table1 つのテーブルのステートメントを含み、もう 1 つはinsertそのテーブルにデータをプラグインする一連のステートメントを含みます。JUnit はこれらを実行してコンテキストをセットアップし、次にコンテキストに対して実際の単体テストを実行します。JUnit と Spring を使用している人なら誰でも、おそらくこのセットアップに精通しています。

問題は、1 つのファイルに PK 値をハード割り当てし、他のファイルのレコードとの参照整合性を維持する必要があることです。

手で。

これを維持するのは頭痛の種です。別のテスト ケースを追加したり、既存のテスト ケースを変更したりしたかっただけで、複数のファイルにまたがる参照を維持するのに費やした時間のカウントを失いました。

これらのステートメントを読み取っcreate tableたり解析したり、作成されたテーブルからスキーマ データを取得したり、テーブル B のこれらのフィールドが実際にはテーブル A の複合 PK への FK オフであることを伝える追加の構成を取得したりできるフレームワークが必要です。

次に、次のような XML ファイルを作成したい場合:

<table_A field1="value" field2="value" pkField1="value" pkField2="value">
  <table_B field1="value" field2="value" pkField3="value" />
  <table_B field1="value" field2="value" pkField3="otherValue" timeField="+5 minutes"/>
</table_A>

テーブル A に 1 つのレコードを作成し、必要に応じて PK 値に注意してから、適切な FK 値を指定してテーブル B に 2 つのレコードを作成し、テーブル B の 2 番目のレコードにはtime前のレコードより 5 分後のフィールドを作成します。参照フィールドの値を明示的にレイアウトする必要はありません。必要でない限り。システムは、必要に応じてフィールドを自動生成し、必要に応じて FK に転送できます。

任意のレベルの深さでネストできるようにしたいと思います。頭のてっぺんから、次のことを想像できます。

<table_a ...>
  <table_b ... />
  <table_b ... />
  <table_b ... />
  <table_c ... />
  <table_c ... />
  <table_d ...>
    <table_e ...>
      <table_f ...>
        <table_g ... />
        <table_g ... />
        <table_h ...>
          <table_i ... />
          <table_i ... />
        </table_h>
      </table_f>
    </table_e>
  </table_d>
</table_a>

私の既存のプロジェクトの1つ。

そのデータセット全体を 9 つではなく 1 つのファイルで指定できるようにしたいと考えています。どのデータとどのデータがつながっているかが分かりやすくなります。これらはすべて、適切なテーブルにプラグインされますが、すべてが同じ DataSource にあるとは限りません。

以前は、ユニット テスト フェーズでデータベース操作の代わりにモック オブジェクトを使用して、多くのことを行っていました。コードがハンズオン テスト フェーズに進み、データベースとやり取りする必要があるときに、問題が発生しました。したがって、モック オブジェクトは十分ではありません。データはデータベースに書き込まれなければならず、システムは PK と FK がすべて適切に相互参照することを保証します。

一言で言えば、上記のすべてを可能にするフレームワークを知っている人はいますか? 日付/時刻の計算を行う機能が含まれていますか? 他の形式に変換しますか?

4

2 に答える 2

1

複雑なテスト データでの苦痛が完全に解消されるかどうかはわかりませんが、 DBUnitは少なくとも少しは楽になると思います。見て試してみる価値があります。

于 2012-09-07T15:37:52.330 に答える
0

要件に完全に一致するツールは知りませんが、Red Gate の SQL Data Generatorはご覧になりましたか? Red Gate は非常に優れた SQL ツールです。

単体テストでのモックオブジェクトの問題だと思います:

したがって、モック オブジェクトは十分ではありません。データはデータベースに書き込まれなければならず、システムは PK と FK がすべて適切に相互参照することを保証します。

改善することができます。オブジェクトの関係に基づいて、ビジネス オブジェクトが適切に検証されていれば、単体テストはさらに便利になります。

于 2012-09-07T15:38:04.730 に答える