假设我想使用Moq在setter上创建回调,以便将set属性存储在我自己的字段中供以后使用。 (有争议的例子 - 但它得到了问题。)我可以这样做:
myMock.SetupSet(x => x.MyProperty).Callback(value => myLocalVariable = value);
这很好用。但是,根据Intellisense,SetupSet已经过时了。但它没有说应该用什么作为替代品。我知道moq提供了SetupProperty,它将使用支持字段自动装配该属性。但这不是我想要的。我想将设定值捕获到我自己的变量中。我应该如何使用非过时的方法?
答案 0 :(得分:87)
我正在使用Moq版本3.0.204.1而SetupSet
没有标记为我已过时。但是,SetupSet
中有一些MockLegacyExtensions
重载。您可以避免使用这些并使用SetupSet
类中定义的Mock
。
差异很小,您需要使用Action<T>
作为SetupSet
参数,而不是Func<T, TProperty>
。
以下调用将调用不推荐的重载:
myMock.SetupSet(p => p.MyProperty = It.IsAny<string>()).Callback<string>(value => myLocalVariable = value);
诀窍是使用It.IsAny<string>
,它将拦截任何值的setter调用。