20

Setup拡張メソッドへの呼び出しを返そうとしていますが、次のメッセージを受信して​​います。

SetUp : System.NotSupportedException : Expression references a method that does not belong to the mocked object: m => m.Cache.GetOrStore<String>("CacheKey", () => "Foo", 900)

GetOrStore拡張メソッドであるCacheオブジェクトのメソッドを参照することに問題があるようです。

コードはコンパイルされますが、この例外でテストは失敗します。

このような拡張メソッドの結果を設定するには、何をする必要がありますか?

4

3 に答える 3

31

Extension methods can not be mocked like instance methods because they are not defined on your mocked type. They are defined in other static classes. Since you can't simply mock those, you should mock all methods/properties used by the extension method.

This is an example of how extension methods tightly couples your code to other classes. Whatever you do, your class depends on those static methods. You can't mock it and test it in isolation. I suggest refactoring your code to move those methods to their classes of their own if there is any logic inside.

于 2012-05-23T08:40:56.070 に答える
5

GetOrStoreMoq は静的メソッドをモックできないため、拡張機能をモックすることはできません。

代わりに、オブジェクトのGetandInsertメソッドをモックするだけです。Cache

于 2012-05-23T08:36:33.093 に答える