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?
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);
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.
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);