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

Rat*_*eek 59 .net c# unit-testing moq mocking

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

myMock.SetupSet(x => x.MyProperty).Callback(value => myLocalVariable = value);
Run Code Online (Sandbox Code Playgroud)

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

Igo*_*aka 92

我使用的是Moq 3.0.204.1版,SetupSet并没有标记为我已经过时了.但是,有几个SetupSet重载位于MockLegacyExtensions.您可以避免使用这些并使用SetupSetMock类上定义的内容.

差异是微妙的,你需要使用Action<T>作为SetupSet参数,而不是Func<T, TProperty>.

下面的调用将调用非弃用的重载:

myMock.SetupSet(p => p.MyProperty = It.IsAny<string>()).Callback<string>(value => myLocalVariable = value);
Run Code Online (Sandbox Code Playgroud)

诀窍是使用It.IsAny<string>,它将拦截任何值的setter调用.

  • @RobSiklos你可以编写`Callback((string value)=> myLocalVariable = value)` (5认同)
  • 很遗憾你需要为`Callback <>`指定泛型参数 (3认同)