MOQ: возвращаемое значение, которое было передано в метод

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

string DoSomething(string whatever);

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

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

Любые идеи?

Ответ 1

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

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

Или немного читаем:

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

Ответ 2

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

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

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

Ответ 3

Общий Return<T> метод может прекрасно справиться с этой ситуацией

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