Можно ли подделать / подделать метод расширения? - PullRequest
7 голосов
/ 30 января 2012

Я использую расширение контроллера, и я попытался смоделировать его с помощью 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)

Ответы [ 3 ]

15 голосов
/ 30 января 2012

Это невозможно. Библиотеки прокси / перехвата, используемые FakeItEasy (и другими популярными бесплатными платформами, такими как Moq или RhinoMocks), не допускают перехвата статических методов (на самом деле статические свойства, запечатанные классы и не виртуальные экземпляры). А метод расширения - это просто разновидность статического метода.

Вы можете взглянуть на TypeMock или JustMock , которые обладают такой функциональностью.

3 голосов
/ 30 января 2012

Если метод расширения объявлен в отдельной сборке, вы можете связать заменяющую сборку с тем же пространством имен.

Однако вам придется заменить и другие необходимые типы из этой сборки.

0 голосов
/ 26 июля 2013

В FakeItEasy вы можете создать его как строгий макет, а затем настроить статический метод

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

...