Necesitamos encontrar un método genérico que se llamará utilizando un tipo anónimo como parámetro de tipo. Considerar:Rhino Mocks: ¿Cómo un método genérico para capturar un tipo anónimo?
interface IProgressReporter
{
T Report<T>(T progressUpdater);
}
// Unit test arrange:
Func<object, object> returnArg = (x => x); // we wish to return the argument
_reporter.Stub(x => x.Report<object>(null).IgnoreArguments().Do(returnArg);
Esto funcionaría si la llamada real para .report <T>() en el método bajo prueba se hizo con objeto como el parámetro de tipo, pero en realidad, el método se denomina con T siendo una tipo anónimo Este tipo no está disponible fuera del método bajo prueba. Como resultado, el talón nunca se llama.
¿Es posible insertar un método genérico sin especificar el parámetro de tipo?
OT un poco, pero ¿cómo consume el destinatario un objeto de tipo anónimo? Nunca he visto un caso de uso así. Solo estoy tratando de revisar la elección de un método genérico aquí. – Gishu
Buena pregunta;) El punto no es que el método Informe haga algo con el argumento, solo para devolverlo. Facilita el encadenamiento en nuestras expresiones LINQ. Como tal, ciertamente podemos reescribirlo, pero pensamos que tendríamos una oportunidad. –
dicho eso. Si crea otro tipo anónimo con el mismo orden y tipo de propiedades, deben ser del mismo tipo. Tal vez eso pueda ayudarlo ... crear un tipo simulado similar en su prueba y hacer un GetType() en él para recuperar el tipo ... pero como dije antes ... se ve intrincado/inteligente. Simple es preferido :) – Gishu