Возвращаемое значение, которое было передано в метод - PullRequest
319 голосов
/ 15 июня 2009

У меня есть метод на интерфейсе:

string DoSomething(string whatever);

Я хочу поиграть с MOQ, чтобы он возвращал все, что было передано - что-то вроде:

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

Есть идеи?

Ответы [ 3 ]

428 голосов
/ 15 июня 2009

Вы можете использовать лямбду с входным параметром, например:

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

Или чуть более читабельно:

.Returns<string>(x => x);
200 голосов
/ 22 августа 2012

Еще более полезно, если у вас есть несколько параметров, вы можете получить доступ к любому / всем из них с помощью:

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

Вам всегда нужно ссылаться на все аргументы, чтобы соответствовать сигнатуре метода, даже если вы собираетесь использовать только один из них.

52 голосов
/ 01 июня 2011

Общий метод Returns<T> может хорошо справиться с этой ситуацией.

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

Или, если метод требует нескольких входов, укажите их так:

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