始める前に、データベースにヒットするテストを「単体テスト」ではないと考えている人がかなりいることを知っています。「統合テスト」の方が適切な名前かもしれません。いずれにせよ、データベースにヒットする開発者テスト。
単体テストを有効にするために、開発者のローカル データベースを用意し、これをクリアして、各テストの開始時にdbUnitを使用して既知のデータ セットを入力します。テストで使用されるテーブルが何らかの方法で変更され、すべての XML データセットを手動で更新する必要があるまで、これはすべてうまく機能します。これは苦痛です。他の人も同じ問題にぶつかったにちがいないと思います。データベースへの入力が必要なテストでは、何を使用し、テーブル定義の変更をどのように処理しますか? (私は Java を使用していますが、さまざまなテクノロジを利用したソリューションに対してオープンです。)
編集: 少し明確にするために。次のような不自然なテストがあります。
void testLoadRevision() {
database.clear(); // Clears every table dbUnit knows about.
database.load("load/trevision.xml", "load/tissue.xml");
SomeDatabaseThingie subject = new SomeDatabaseThingie(databaseProvider);
Revision actual = subject.load();
assert(actual, expected);
}
その中に、tRevision と tIssue という 2 つのテーブルがあります。ロードされたリビジョンは、tIssue からの少量のデータを使用します。その後、tIssue は、リビジョンが気にしない新しいフィールドを取得します。新しいフィールドは「非 null」であり、適切なデフォルトがないため、tIssue.xml が無効になるため、このテストは失敗します。
このような小さな変更では、tIssue を編集するのは難しくありません。しかし、各フローで XML ファイルの数が膨らみ始めると、大量の作業になります。
乾杯、
mlk