2012-01-15 11 views
0

私の統合テストでは、EFイニシャライザを使用して生成されたライブDBを使用しています。テストを個別に実行すると、期待どおりに実行されます。しかし、それらを一度に実行すると、失敗したテストがたくさんあります。エンティティフレームワークのコードファースト - 互いに重なり合うテスト

私はいくらか重複しているように見えます。たとえば、同じセットアップ方法を使用する2つのテストがあります。このセットアップ方法ビルド&は、DBを作成します。どちらのテストでも同じテストACTが実行されますが、これはDBにいくつかのアイテム(同じアイテム)を追加しますが、それぞれのテストでは(多くのことを行う大きなテストではなく)異なる計算が求められます。私はこの問題を解決することができ

一つの方法は、実行しています各テストは、すべてが単離されたままそのように一意のDBを作成し、セットアップでいくつかのトリックを行うことです。しかし、EFの初期化作業は、新しいDBを作成するために、&を新しいものに置き換えるのではなく、新しいDBを作成するため、動作しません(後者がシードをトリガーします)。

これに対処する方法のアイデアはありますか?私のテストの組織のようだ...それについて最善を尽くす方法を示しておらず、入力を探していた。本当に各テストを手動で実行する必要はありません。

答えて

2

テストフレームワークで提供されているテストセットアップとティアダウンメソッドを使用し、テストセットアップでトランザクションを開始し、テストを破棄してトランザクションをロールバックします(example for NUnit)。また、テストの最後にロールバックしてデータベースを初期状態にする独自のトランザクションで各テストを実行することもできます。

0

Ladislavに言及したものの次に、Delta Assertionという名前のものを使用することもできます。

たとえば、あなたがSUTに新しいOrderを追加テストしたとします。

あなたは正確に1 Order、データベース内の試験終了時があることを表明し、テストを作成することができます。

しかし、あなたはまた、最初のテストメソッドの開始時にデータベース内にあるどのように多くの注文チェックすることにより、デルタアサーションを作成することができます。次にOrderをSUTに追加した後、NumberOfOrdersAtStart + 1がデータベースに存在することをテストします。

関連する問題