【问题标题】:Moq - setup mock to first-time callback and second-time raising an eventMoq - 将模拟设置为第一次回调和第二次引发事件
【发布时间】:2012-12-12 02:36:41
【问题描述】:

我得到的东西看起来像这样:

public delegate void MyCallback(string name);

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

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

我能做什么?

【问题讨论】:

  • 即使在 Moq 中必须有一种方法可以做到这一点,如果测试足够简单,我已经通过编写一个假的并添加类似的内容来做到这一点:if (calls++ > 1) throw new Exception("") 而不是使用 Moq。
  • 您不能使用 Moq 模拟非虚拟方法(例如 MyFunc)。你到底想在这里做什么?你想更精确地测试什么?您能否为您的问题提供更多背景信息?

标签: c# events callback moq


【解决方案1】:

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

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);
        });

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 2011-11-09
    • 2012-07-31
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多