假设我想使用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/

10-12 02:48