2012-01-30 23 views
7

sto usando un estensione del controller, e ho cercato di deridere utilizzando FakeItEasy (v 1.7.4) come questo:è possibile simulare/falsificare un metodo di estensione?

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

ma ottengo questo errore:

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) 

risposta

15

Questo non è possibile. Le librerie di proxy/intercettazione utilizzate da FakeItEasy (e altri popolari framework gratuiti, come Moq o RhinoMocks) non consentono l'intercettazione di metodi statici (proprietà statiche, classi sigillate e metodi di istanza non virtuali in effetti). E il metodo di estensione è solo una sorta di metodo statico.

È possibile dare un'occhiata a TypeMock o JustMock, che dispongono di tale funzionalità.

+1

In alternativa, se si desidera un'opzione gratuita, Moles permette anche beffardo di metodi statici: http: // ricerca .microsoft.com/it-it/projects/pex/ –

+4

Questo potrebbe arrivare a FakeItEasy. Quanto presto, non sono sicuro - https://github.com/FakeItEasy/FakeItEasy/issues/90 –

3

Se il metodo di estensione è dichiarato in un assembly separato, è possibile collegare un assembly di sostituzione con lo stesso spazio dei nomi.

Si dovrebbe sostituire anche qualsiasi altro tipo richiesto da questo assieme.

+1

+1: questa è una soluzione davvero interessante purché non sia necessario sostituirli troppo. –

+0

@jimmy_keen Grazie! È fondamentalmente la linea di collegamento da [Lavorare in modo efficace con il codice legacy] (http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052). – TrueWill

Problemi correlati