1

私は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と置き換えても例外がスローされます。上記のコードを参照してください。

+0

ルイスは、あなたの完全なテストとテスト対象のメソッドを投稿することができますか?それがなければ何が問題なのかを理解することが難しいです。 – JamesR

+0

完了@ JamesR! –

+0

あなたの例はあまり明確ではありません。まずテスト済みのメソッド実装(** SaveAmountsAfterCalculation **)を提供していないので、テストしています、プロパティを2番目に** SomeProperty **あなたが確認しようとしているも表示されていません。私たちはあなたに手を差し伸べることができます。 – JamesR

答えて

0

ライン"Isolate.WhenCalled(() => new MyContext()).WillReturn(fakeContext);は「時代遅れとあなたはfakeNextInstanceを使用するときには、すでにコール"new MyContext()"を偽造するので、おそらくあなたの問題を引き起こしているように見えます。

+0

これは私が最初に試したことです。うまくいきませんでした。 : –

+0

** somehtingElse **インスタンスは何ですか? – JamesR

+0

これは何かのリストです。私は簡単にするために私の本名を使用しませんでした。 –

関連する問題