假设我想使用Moq在setter上创建回调,以将set属性存储在我自己的字段中以供以后使用。 (人为的例子-但这是问题的关键。)我可以做这样的事情:
myMock.SetupSet(x => x.MyProperty).Callback(value => myLocalVariable = value);
而且效果很好。但是,根据Intellisense,SetupSet已过时。但这并没有说明应该使用什么替代方法。我知道moq提供了SetupProperty,它将自动将属性与后备字段连接起来。但这不是我想要的。我想将设置值捕获到我自己的变量中。我应该如何使用非过时的方法呢?
最佳答案
我正在使用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调用。关于c# - SetupSet()已过时。代替什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2950318/