19

Migrator.NETを使用して、アプリケーションのデータベース移行を作成しています。マルク・アンドレ・クルノワイエは次のように書いています。

アプリケーションのコードと同様に 、移行をテストする必要があります。浮き沈みコード。継続的なビルド プロセスの一部として実行し、できるだけ多くの異なるデータベースと環境でテストしてください。

それ、どうやったら出来るの?テーブルを作成する Up() メソッドと、同じテーブルを削除する Down() メソッドがあり、SQL Server を使用しているとします。テストはどのようになりますか?のようなシステム テーブルに対して SQL クエリを実行してselect * from sys.columns、テーブルが作成されたかどうか、および適切な構造を持っているかどうかを確認する必要がありますか? NHibernate を使用している場合はどうなるでしょうか。

編集 Rails ActiveRecord Migrations の意味での移行を意味します (C# コードに基づいて小さなステップでデータベースを作成、変更、破棄します)。

EDIT 2 そして、移行をテストする必要があることについて読んだところですブログ投稿は、実際には Migrator の wiki からリンクされています。

4

6 に答える 6

6

DAL をテストしますか? ある種の統合テストですか?

移行スクリプトだけでなく、ベースライン スクリプトも必要です。データベースのアップグレードをテストする場合は、テスト/ステージング サーバーでベースラインからすべてのスクリプトを実行して、データベースの最新バージョンを作成する必要があります。次に、最新のテスト データベースに対して DAL をテストします。すべての DAL テストが成功した場合、移行は成功したはずです (そうでない場合、DAL テストは十分に完了していません)。

実行するにはコストがかかるテストですが、かなり堅実です。個人的には、現時点ではこれの多くを手動で行っていることを認めます。すべてのスクリプト (ベースラインを含む) を適用する社内移行ツールがあるため、テスト データベースのセットアップと DAL テストは別の手順です。しかし、それは機能します。テーブルが作成されたことを確認したい場合は、実際にテーブルにデータを挿入するよりも良い方法はありません!

システム カタログやINFORMATION_SCHEMAビューなどを調べて結果を検証することはできますが、実際に機能していることを最終的に確認する唯一の方法は、新しいオブジェクトを使用してみることです。オブジェクトがそこにあるからといって、それらが機能しているとは限りません。

于 2010-03-04T03:04:55.303 に答える
2

たぶん、このスクリプトがあなたを助けることができます:

http://www.bezzon.se/forum/uploads/bezzon/2006-03-27_134824_sp_CompareDB.txt

このスクリプトは 2 つのデータベース (構造とデータ) を比較します。

于 2010-02-25T08:02:41.507 に答える
2

ソース管理は、現在のコード ベースのスナップショットを取得するためのものです。移行は、データベースをあるバージョンから次のバージョンに変更するためのものです。将来のある時点で、古いデータベースを取得し、移行を適用して、最新のコード ベースで作業できるようにします。

実際の移行がテストされているのを見たことがありません。私はテスト結果を見てきましたが、最新の移行を実行するように私を捕まえたり思い出させたりしました。

describe User do
  it { should have_column :name, :type => :string }
  it { should validate_presence_of :name}       
end

だから誰かがモデルを変更します。モデルを反映するテストを追加します。移行を追加します。次に、ソースをコミットします。
最新のテストを実行します。データベースが対応していないため、テストは失敗します。移行を実行してから、テストを再実行することを忘れないでください。成功。

于 2010-03-02T19:56:55.520 に答える
1

NHibernate を使用している場合は、移行テストを全体的な永続性テスト戦略の一部として扱います。つまり、エラーなしですべてのエンティティを作成および保存できる場合、データベースマッピングは正しいはずです。

于 2010-03-04T02:57:06.503 に答える
0

データベース システム オブジェクトを比較することはできますが、比較するターゲットが必要です。

データ層でエンティティまたは操作を実行する一連のエッジ ケース CRUD 操作テスト ケースを作成する方がよいと思います。これらのいずれかが失敗した場合、データベースは必要なものと同期していません。つまり、フィールド char(20) の挿入が、データベースでは char(15) しかないために失敗した場合です。次に、データベース構造の比較を実行して、オフの場合を確認できます。

最近変更されたアイテムのみに注目し、以前の変更が適用されていると仮定することで、これを回避できる場合があります。

于 2010-03-03T05:11:36.390 に答える
0

これに対する答えも探しています。これは、単体テストではなく統合環境でテストする必要があると思います。単体テスト (DAL) の場合、データベースを削除して再作成します。

ただし、理想的には、DB が本番環境からレプリケートされ、DB 移行スクリプトが両方の方法で実行される統合環境が必要です。

于 2010-03-16T17:05:15.843 に答える