2011-03-18 13 views

Respuesta

24

Se puede hacer, sin embargo, no se puede hacer de la caja. El truco es implementar IFakeObjectCallRule y agregarlo a tu falso a través de Fake.GetFakeManager (foo) .AddRule (myRule).

Estoy pensando en implementar esta característica, sin embargo, sería algo como esto:

A.CallTo (foo) .WhereMethod (x => x.Name == "MyProtectedMethod") devuelve (". lo que sea");

Sin embargo, la sintaxis no es del todo refinada.

Editar La característica mencionada anteriormente ahora se implementa:

A.CallTo(foo).Where(x => x.Method.Name == "MyProtectedMethod").WithReturnType<int>().Returns(10); 
+0

Impresionante. Muchas gracias por la nueva característica. Ahora puedo eliminar mi propia regla nuevamente. –

+0

Probé el código que proporcionó anteriormente, pero todavía se está llamando al método MyProtectedMethod. Esperaría que devuelva el valor de devolución falso pero no para llamar al método original. ¿Estoy haciendo algo mal? – stusherwin

+1

@stusherwin Quizás el método no sea virtual? –

12

Además de la respuesta de Patrik, pensé que sería relevante en este post para agregar una punta de cómo se puede burlarse de una propiedad protegida miembro:

A.CallTo(foo).Where(x => x.Method.Name == "get_MyProtectedProperty").WithReturnType<int>().Returns(10); 

Así es como la reflexión trata los métodos de obtención de propiedades 'getter'.

Espero que ayude :)

Cuestiones relacionadas