让模拟方法在每次调用时输出不同的输出参数和最小起订量

Luk*_*keW 5 c# testing unit-testing moq out

有没有一种方法可以使用最小起订量对方法进行顺序调用返回不同的out参数?获取该方法的快速示例:

public void OutputANumber(out int number)
Run Code Online (Sandbox Code Playgroud)

输出 1,然后输出 2 (忽略它可能返回的事实int,这只是一个示例,不是真正的代码)。

int number = 1;
mock.Setup(n => n.OutputANumber(out number));
number = 2;
mock.Setup(n => n.OutputANumber(out number));
Run Code Online (Sandbox Code Playgroud)

不起作用,因为第二个设置会覆盖第一个设置,同样,SetupSequence仅允许顺序返回。

Luk*_*keW 2

一种解决方案是使用回调将模拟传递到运行新设置的方法中,如下所示

int number = 1;
mock.Setup(n => n.OutputANumber(out number)).Callback(() => ChangeOut(mock));

void ChangeOut(Mock<type> mock)
{
    int number = 2;
    mock.Setup(n => n.OutputANumber(out number));
}
Run Code Online (Sandbox Code Playgroud)

或者您可以创建一个虚拟对象来跟踪调用次数并根据需要输出新值。