假设我想使用Moq在setter上创建一个回调,将set属性存储在我自己的字段中,供以后使用.(做作的例子——但它说到了问题的关键.)我可以这样做:

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

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

推荐答案

我使用的是Moq版本3.0.204.1,SetupSet does对我来说没有被标记为过时.然而,MockLegacyExtensions中有SetupSet个过载.可以避免使用这些,而使用Mock类上定义的SetupSet.

差别很小,需要使用Action<T>作为SetupSet参数,而不是Func<T, TProperty>.

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

myMock.SetupSet(p => p.MyProperty = It.IsAny<string>()).Callback<string>(value => myLocalVariable = value);

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

.net相关问答推荐

从Couchbase删除_txn文档的推荐方法?""

如何将 select 语句详细信息提取到不同的方法中仍然保持Eager 加载?

保存时不保留 XML 格式

如何手动注入依赖注入

查找 2 个已知值之间的字符串

如何调试 .NET 运行时中的内部错误?

将字符串与容差进行比较

.NET 的future 版本会支持 C# 中的元组吗?

使用 .NET 在 Windows 中创建弹出式 toastr 通知

在 WPF 窗口中获取当前聚焦的元素/控件

调用委托与方法的性能

.NET - 实现捕获所有异常处理程序的最佳方法是什么

双倍的? = 双倍? + 双倍?

如何对 LINQ to XML 中的元素进行深层复制?

Dispatcher.CurrentDispatcher 与 Application.Current.Dispatcher

如何在 Dapper.Net 中编写一对多查询?

如何为我的 C# 应用程序创建产品密钥?

System.ServiceModel 在 .NET Core 项目中找不到

从不同程序集中的类名中解析类型

嵌套捕获组如何在正则表达式中编号?