我需要以这样的方式模拟HttpResponseBase.ApplyAppPathModifier
,模拟会自动返回调用参数ApplyAppPathModifier
。
我有以下代码:
var httpResponseBase = new Mock<HttpResponseBase>();
httpResponseBase.Setup(hrb => hrb.ApplyAppPathModifier(/*capture this param*/))
.Returns(/*return it here*/);
有什么想法吗?
修改
在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写代码时会发生什么
答案 0 :(得分:28)
是的,您可以回显传递给方法的参数
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);
答案 1 :(得分:10)
使用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);