设置模拟到第一次回调和第二次引发事件

本文关键字:第二次 事件 回调 模拟 第一次 设置 | 更新日期: 2023-09-27 17:49:45

我得到了这样的东西:

public delegate void MyCallback(string name);
public class MyClass
{
    public virtual void MyFunc(string name, MyCallback callback)
    {
        ...
    }
}

现在,当我用moq模拟MyClass时,我希望第一次调用MyFunc来调用回调,第二次调用该函数来引发一些事件,但在使用moq回调后,我不能引发事件!

我该怎么办?

设置模拟到第一次回调和第二次引发事件

据我所知,Moq不支持这种链接,但您可以轻松地绕过它:

var mock = new Mock<MyClass>();
int callsCount = 0;
mock
    .Setup(m => m.MyFunc(It.IsAny<int>(), It.IsAny<MyCallback>()))
    .Callback<int, MyCallback>(
        (i, callback) => 
        {
            if (callsCount++ == 0) callback("Some string");
            else mock.Raise(m => m.SomeEvent += null, EventArgs.Empty);
        });