使用 Moq,我试图设置一个方法来根据参数返回一些东西。所以,如果你传递argument1,你会得到result1,如果你传递argument2,你会得到result2:
var obj = "";
var propertyMock1 = new Mock<PropertyInfo>();
var propertyMock2 = new Mock<PropertyInfo>();
var result1 = "";
var result2 = "";
var factoryMock = new Mock<IFactory>();
factoryMock.Setup(f => f.Create(obj, propertyMock1.Object)).Returns(result1);
factoryMock.Setup(f => f.Create(obj, propertyMock2.Object)).Returns(result2);
但是,当我调用 时factoryMock.Object.Create(obj, propertyMock1.Object)
,返回值为null
。如果我通过propertyMock2.Object
了,它会按预期工作。
我不知道为什么第一个设置不起作用。
ReSharper 给了我一些提示,但我不明白。在第一个设置中,它显示“隐式捕获的闭包:property2”,在第二个设置中,它显示“隐式捕获的闭包:property1”。
为什么每个 lambda 都会捕获另一个 lambda 的参数?他们甚至有什么关系?为什么第一个设置不起作用?