小编gir*_*uru的帖子

我可以使用Moq的SetupSequence引发异常然后返回void吗?

我试图将Moq设置为在第一次调用时引发异常,然后在第二次调用时返回void。我嘲笑的方法具有void返回类型(例如public void Bar())。

我尝试过的事情

由于Returns需要参数和SetupSequence类型参数,因此存在编译错误。

_mock.SetupSequence(m => m.Bar())
    .Throws<Exception>()
    .Returns();
Run Code Online (Sandbox Code Playgroud)

由于Void不是C#中的类型,因此存在编译错误。

_mock.SetupSequence<IMyMock, Void>(m => m.Bar())
    .Throws<Exception>() // first invocation throws exception
    .CallBase();
Run Code Online (Sandbox Code Playgroud)

解决方法

最后,我放弃了SetupSequence(),转而Callback()抛出异常。

var firstTime = true;
_mock.Setup(m => m.Bar())
    .Callback(() =>
    {
        if (firstTime)
        {
            firstTime = false;
            throw new Exception();
        }
    });
Run Code Online (Sandbox Code Playgroud)

SetupSequence需要一个Func,而不是一个Action。我是否SetupSequence()可以假设此方法不能用于模拟void方法,对吗?

c# moq mocking

2
推荐指数
1
解决办法
884
查看次数

标签 统计

c# ×1

mocking ×1

moq ×1