SetupSet()已过时。代替什么?

时间:2010-06-01 13:53:15

标签: c# .net unit-testing mocking moq

假设我想使用Moq在setter上创建回调,以便将set属性存储在我自己的字段中供以后使用。 (有争议的例子 - 但它得到了问题。)我可以这样做:

myMock.SetupSet(x => x.MyProperty).Callback(value => myLocalVariable = value);

这很好用。但是,根据Intellisense,SetupSet已经过时了。但它没有说应该用什么作为替代品。我知道moq提供了SetupProperty,它将使用支持字段自动装配该属性。但这不是我想要的。我想将设定值捕获到我自己的变量中。我应该如何使用非过时的方法?

1 个答案:

答案 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调用。