Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我能用最小起订量吗;设置序列以引发异常,然后返回void?_C#_Mocking_Moq - Fatal编程技术网

C# 我能用最小起订量吗;设置序列以引发异常,然后返回void?

C# 我能用最小起订量吗;设置序列以引发异常,然后返回void?,c#,mocking,moq,C#,Mocking,Moq,我试图设置Moq,在第一次调用时抛出异常,然后在第二次调用时返回void。我正在模拟的方法具有void返回类型(例如公共void Bar()) 我尝试过的事情 这有编译错误,因为返回需要参数,而设置序列需要类型参数 _mock.SetupSequence(m => m.Bar()) .Throws<Exception>() .Returns(); 解决方法 最后,我放弃了SetupSequence(),转而使用Callback()抛出异常 var firstT

我试图设置Moq,在第一次调用时抛出异常,然后在第二次调用时返回void。我正在模拟的方法具有
void
返回类型(例如
公共void Bar()

我尝试过的事情

这有编译错误,因为
返回
需要参数,而
设置序列
需要类型参数

_mock.SetupSequence(m => m.Bar())
    .Throws<Exception>()
    .Returns();
解决方法

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

var firstTime = true;
_mock.Setup(m => m.Bar())
    .Callback(() =>
    {
        if (firstTime)
        {
            firstTime = false;
            throw new Exception();
        }
    });
问题


SetupSequence
采用
Func
,而不是
操作
。我假设这意味着
SetupSequence()
不能用于模拟无效方法,对吗?

您可以从Moq 4.8.0开始执行此操作:

SetupSequence
void
方法的支持在GitHub问题中进行了讨论,并随GitHub pull请求一起添加

您可能正在寻找新的
.Pass()
方法:

mock.SetupSequence(m => m.VoidMethod())
    .Throws(new InvalidOperationException())
    .Pass()
    .Pass()
    .Throws(new InvalidOperationException())
    .Pass();

请注意,对
.Pass()
的后续调用可能是不必要的。

据我所知,
Setup
为每个调用定义了相同的行为。你有一个例子吗?
mock.SetupSequence(m => m.VoidMethod())
    .Throws(new InvalidOperationException())
    .Pass()
    .Pass()
    .Throws(new InvalidOperationException())
    .Pass();