web-dev-qa-db-fra.com

Renvoyer une valeur qui a été transmise à une méthode

J'ai une méthode sur une interface:

string DoSomething(string whatever);

Je veux me moquer de cela avec MOQ, afin qu'il retourne ce qui a été passé - quelque chose comme:

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

Des idées?

333
Steve Dunn

Vous pouvez utiliser un lambda avec un paramètre d'entrée, comme ceci:

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

Ou légèrement plus lisible:

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

Encore plus utile, si vous avez plusieurs paramètres, vous pouvez y accéder avec:

_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));

Vous devez toujours référencer tous les arguments pour qu'ils correspondent à la signature de la méthode, même si vous n'allez en utiliser qu'un seul.

210
Steve

La méthode générique Returns<T> peut gérer cette situation correctement.

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

Ou si la méthode nécessite plusieurs entrées, spécifiez-les comme suit:

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