0

現在、SeedメソッドでSQLを直接実行することにより、Unique制約を実装しています。

context.Database.ExecuteSqlCommand(
    "BEGIN TRY ALTER TABLE MyTable ADD CONSTRAINT UC_CODE UNIQUE (COL1, COL2, COL3) END TRY BEGIN CATCH END CATCH");

しかし、今ではこれに対するテストを適切に書くことができません。

リポジトリをモックして、同じレコードを2回挿入しますが、データベースが実際に呼び出されていないため(呼び出されるべきではないため)、エラーはスローされません。重複レコードが挿入されたときにエラーがスローされることを保証しますか?

4

2 に答える 2

0

単体テストでは、テストするコードを調整する必要があります。制約違反に対するEF+DBの反応をテストしたいとします。したがって、テストの開始時に作成できる実際の(テスト)データベースでテストを実行する必要があります。

于 2013-02-26T21:44:03.227 に答える
0

リポジトリをモックし、同じレコードを 2 回挿入しますが...もちろん、データベースが実際には呼び出されないため (また、呼び出されるべきではないため)、エラーはスローされませんが、次のようなテストを作成するにはどうすればよいですか?重複レコードが挿入されたときにエラーがスローされるようにしますか?

依存関係のモックと偽造のポイントを誤解しています。偽のリポジトリはロジックを実行するべきではありません。一意の制約違反に対してコードがどのように反応するかをテストする場合は、予想される例外をスローするようにモックを設定するだけです。

于 2013-02-14T19:14:43.070 に答える