Ho un metodo preso in giro che assomiglia a questo:Invocare Func passato come parametro per un mock utilizzando Moq e C#
class NotMineClass {
T Execute(Func operation)
{
// do something
return operation();
}
}
Nel mio codice, lo faccio come ad esempio:
public MyType MyMethod()
{
MyType object = new MyType();
bool success = notMineClassInstance.Execute(() =>
{
// some things
retVal = injectedObject1.method();
object.attribute = injectedObject2.method();
// some other things
return retVal;
}
if (success)
{
object.otherAttribute = someValue;
}
return object;
}
mio caso è, sto testando MyMethod con Moq e voglio verificare il comportamento di Func è come previsto. Ho alcuni oggetti iniettati nel suo corpo, che sono mock e dovrebbero essere verificati; inizia anche a costruire il mio valore di ritorno, quindi non posso fare alcuna asserzione a meno che non invoco la funzione passata come parametro.
in Java e JUnit + EasyMock, vorrei cogliere il parametro passato, in questo modo:
public void testMyMethod() {
// ...
Capture < Function < void, Boolean > > functionCapture = Captures.last();
expect(notMineClassInstance.execute(EasyMock.capture(functionCapture)));
// Expectations for the body of the function
replay();
functionCapture.getValue().apply(null);
}
Come posso fare lo stesso utilizzando C# + Moq?
Sembra ottimo, ma quando lo faccio, viene visualizzato il seguente errore: * Test 'non riuscito: System.NullReferenceException: riferimento oggetto non impostato su un'istanza di un oggetto. al test. b__0 (Func'1 catturato) * –
@ LuísGuilherme vedere il campione completo di prova –
Ha funzionato dall'inizio. Stavo ricevendo un riferimento Null all'interno della chiamata Func :) –