C# Moq是否可以返回传递到对具有void返回类型的Mock调用的Setup方法中的真实对象实例?
我有一个这样的电话:C# Moq是否可以返回传递到对具有void返回类型的Mock调用的Setup方法中的真实对象实例?,c#,moq,C#,Moq,我有一个这样的电话: _session.Setup(session => session.SaveOrUpdate(It.IsAny<Foo>())) 在此场景中,foo始终返回null,即使服务层中的实际foo已填充 编辑: 这不是上述副本的副本,因为此问题的不同之处在于SaveOrUpdate返回void。在据称重复的文章中,这些方法返回的不是void。因此,我需要从“Returns”不是有效选项的方法中获取变量,这是其他文章中的解决方案。在这里引导一些精神力量 看起来您
_session.Setup(session => session.SaveOrUpdate(It.IsAny<Foo>()))
在此场景中,foo
始终返回null
,即使服务层中的实际foo
已填充
编辑:
这不是上述副本的副本,因为此问题的不同之处在于SaveOrUpdate返回void。在据称重复的文章中,这些方法返回的不是void。因此,我需要从“Returns”不是有效选项的方法中获取变量,这是其他文章中的解决方案。在这里引导一些精神力量
看起来您可能正在使用,如果是,则表示SaveOrUpdate
具有以下签名:
void SaveOrUpdate(object obj);
因此,为了获得Foo
对象,需要将object
指定为类型参数,例如:
_session.Setup(session => session.SaveOrUpdate(It.IsAny<object>()))
.Callback<object>(objectBeingSaved => foo = objectBeingSaved as Foo);
\u session.Setup(session=>session.SaveOrUpdate(It.IsAny()))
.Callback(objectBeingSaved=>foo=objectbeingsaveasfoo);
看起来不错。由于没有调用回调,您确定foo
为空吗?还是因为as
返回null
?可以在回调lambda中设置断点进行检查吗?是的,foo返回null。即使我把它作为一个没有任何铸造的对象/“as”。啊,我以前也没想过把IsAny换成IsAny。现在可以了。谢谢
_session.Setup(session => session.SaveOrUpdate(It.IsAny<object>()))
.Callback<object>(objectBeingSaved => foo = objectBeingSaved as Foo);