10

私はコントローラー拡張機能を使用しており、次のように FakeItEasy (v 1.7.4) を使用してそれをモックしようとしました:

A.CallTo(() => controller.RenderView(A<string>.Ignored,A<object>.Ignored,null)).Returns("");

しかし、私はこのエラーが発生します:

System.NullReferenceException : Object reference not set to an instance of an object.
at System.Object.GetType()
at FakeItEasy.Creation.ProxyGeneratorSelector.MethodCanBeInterceptedOnInstance(MethodInfo method, Object callTarget, ref String failReason)
at FakeItEasy.Configuration.DefaultInterceptionAsserter.AssertThatMethodCanBeInterceptedOnInstance(MethodInfo method, Object callTarget)
at FakeItEasy.Configuration.FakeConfigurationManager.CallTo(Expression`1 callSpecification)
4

3 に答える 3

15

これは不可能です。FakeItEasy (および Moq や RhinoMocks などの他の一般的なフリー フレームワーク) で使用されるプロキシ/インターセプト ライブラリでは、静的メソッド (実際には静的プロパティ、シールされたクラス、および非仮想インスタンス メソッド) のインターセプトは許可されません。そして、拡張メソッドは一種の静的メソッドです。

そのような機能を備えたTypeMockまたはJustMockを見ることができます。

于 2012-01-30T14:03:40.510 に答える
3

拡張メソッドが別のアセンブリで宣言されている場合は、同じ名前空間を持つ置換アセンブリにリンクできます。

ただし、このアセンブリから他の必要な型も置き換える必要があります。

于 2012-01-30T14:15:46.027 に答える
-1

FakeItEasy では、厳密なモックとして作成し、静的メソッドを構成できます

http://hocke.blogspot.com.ar/2011/03/extension-method-for-creating-strict.html

于 2013-07-25T21:10:11.573 に答える