私はAsp.Net MVCプロジェクトで自分のリポジトリをテストしています。ユニットテストのためにDbContextをモックする必要があります。 DbContextが挿入されていないため、コードを変更できません。Typemockアイソレータ:注入されていないDbContextをモックする方法はありますか?
私はこのanswerをチェックしました。私はこれをステップバイステップで実行しましたが、動作しませんでした。これは私のコードです。簡略化しようとしました:
[TestMethod]
public void SaveAmountsAfterCalculation()
{
// Faking the Context
var fakeContext = Isolate.Fake.NextInstance<MyContext>();
Isolate.WhenCalled(() => new MyContext()).WillReturn(fakeContext);
// Faking one the the DbSetList of the Context
Isolate.WhenCalled(() => fakeContext.SomeDbSet)
.WillReturnCollectionValuesOf(somehtingElseList);
// Calling the method to test
MyRepository.SaveAmountsAfterCalculation();
// Verifying if SomeProperty was called
Isolate.Verify.WasCalledWithAnyArguments(() => fakeContext
.SomeProperty.Attach(null));
}
文を使用してコンテキストを作成すると、例外はスローされません。
using (var ctx = new MyContext())
{
...
// The exception is thrown here.
if (ctx.SomeDbSet.Any(...))
...
}
が、私は任意のプロパティ(DbSet)を検査した場合、私はこのエラーを見ることができます:という名前の接続文字列は、「あるMyContext」アプリケーションの設定ファイルで見つけることができます。。私はすでにテストプロジェクトに接続文字列を追加しましたが、それもうまくいきませんでした。 SomeDbSet
が呼び出された瞬間、TypeMockにそのメソッドの結果をsomethingElse
と置き換えても例外がスローされます。上記のコードを参照してください。
ルイスは、あなたの完全なテストとテスト対象のメソッドを投稿することができますか?それがなければ何が問題なのかを理解することが難しいです。 – JamesR
完了@ JamesR! –
あなたの例はあまり明確ではありません。まずテスト済みのメソッド実装(** SaveAmountsAfterCalculation **)を提供していないので、テストしています、プロパティを2番目に** SomeProperty **あなたが確認しようとしているも表示されていません。私たちはあなたに手を差し伸べることができます。 – JamesR