我正在尝试设置Moq以在第一次调用时抛出异常,然后在第二次调用时返回void。我嘲笑的方法有一个void
返回类型(例如public void Bar()
)。
我尝试过的事情
这有编译错误,因为Returns
需要参数而SetupSequence
需要类型参数。
_mock.SetupSequence(m => m.Bar())
.Throws<Exception>()
.Returns();
这有一个编译错误,因为Void
不是C#中的类型。
_mock.SetupSequence<IMyMock, Void>(m => m.Bar())
.Throws<Exception>() // first invocation throws exception
.CallBase();
解决方法
最后我放弃了SetupSequence()
并切换到Callback()
以抛出异常。
var firstTime = true;
_mock.Setup(m => m.Bar())
.Callback(() =>
{
if (firstTime)
{
firstTime = false;
throw new Exception();
}
});
问题
SetupSequence
需要Func
,而非Action
。我是否正确假设这意味着SetupSequence()
不能用于模拟void方法?