wake-up-neo.net

Rückgabewert, der an eine Methode übergeben wurde

Ich habe eine Methode für eine Schnittstelle:

string DoSomething(string whatever);

Ich möchte dies mit MOQ verspotten, damit es zurückgibt, was auch immer übergeben wurde - so etwas wie:

_mock.Setup( theObject => theObject.DoSomething( It.IsAny<string>( ) ) )
   .Returns( [the parameter that was passed] ) ;

Irgendwelche Ideen?

333
Steve Dunn

Sie können ein Lambda mit einem Eingabeparameter wie folgt verwenden:

.Returns((string myval) => { return myval; });

Oder etwas besser lesbar:

.Returns<string>(x => x);
445
mhamrah

Noch nützlicher ist es, wenn Sie mehrere Parameter haben, auf die Sie mit folgendem Befehl zugreifen können:

_mock.Setup(x => x.DoSomething(It.IsAny<string>(),It.IsAny<string>(),It.IsAny<string>())
     .Returns((string a, string b, string c) => string.Concat(a,b,c));

Sie müssen immer auf alle Argumente verweisen, damit sie mit der Signatur der Methode übereinstimmen, auch wenn Sie nur eines davon verwenden.

210
Steve

Das generische Returns<T> Methode kann mit dieser Situation gut umgehen.

_mock.Setup(x => x.DoSomething(It.IsAny<string>())).Returns<string>(x => x);

Oder wenn die Methode mehrere Eingaben erfordert, geben Sie diese wie folgt an:

_mock.Setup(x => x.DoSomething(It.IsAny<string>(), It.IsAny<int>())).Returns((string x, int y) => x);
56
WDuffy