Возможно ли передавать значения параметров в Moq?
Мне нужно высмеять HttpResponseBase.ApplyAppPathModifier
таким образом, чтобы вызываемый параметр ApplyAppPathModifier
вызывается с автоматически возвращается макетом.
У меня есть следующий код:
var httpResponseBase = new Mock<HttpResponseBase>();
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(/*capture this param*/))
.Returns(/*return it here*/);
Любые идеи?
EDIT:
Нашел решение на первой странице документации Moq (http://code.google.com/p/moq/wiki/QuickStart):
var httpResponseBase = new Mock<HttpResponseBase>();
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(It.IsAny<string>)
.Returns((string value) => value);
Я вдруг чувствую себя намного глупее, но я думаю, что это то, что происходит, когда вы пишете код в 23:30
Ответы
Ответ 1
Используйте It
:
It.Is<MyClass>(mc=>mc == myValue)
Здесь вы можете проверить ожидание: значение, которое вы ожидаете получить.
С точки зрения возврата, просто возвращайте значение, которое вам нужно.
var tempS = string.Empty;
var httpResponseBase = new Mock<HttpResponseBase>();
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(It.Is<String>(s=>{
tempS = s;
return s == "value I expect";
})))
.Returns(tempS);
Ответ 2
Да, вы можете повторить аргумент, переданный методу
httpResponseBase.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>()))
.Returns((string path) => path);
Вы также можете записать его, если хотите
string capturedModifier = null;
httpResponseBase.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>()))
.Callback((string path) => capturedModifier = path);