【发布时间】:2015-03-19 14:26:21
【问题描述】:
我有接口
public interface IBar
{
}
和
public interface IFoo
{
event EventHandler<IBar> MyEvent;
}
还有一个班级
public class Foobar
{
public Foobar(IFoo foo)
{
foo.MyEvent += MyEventMethod;
}
private void MyEventMethod(object sender, IBar bar)
{
// do nothing
}
}
现在我想使用 Moq 4 对这段出色的代码进行单元测试:
[Test]
public void MyTest()
{
Mock<IFoo> foo = new Mock<IFoo>();
Mock<IBar> bar = new Mock<IBar>();
Foobar foobar = new Foobar(foo.Object);
foo.Raise(e => e.MyEvent += null, bar.Object);
}
据我了解 Foobar.MyEventMethod 应该通过 raise 来调用。发生的情况是我得到一个运行时异常,显示 System.Reflection.TargetParameterCountEception {"Parameter count mismatch."}。
有趣的事情:当我在单元测试中提出以下问题时:
foo.Raise(e => e.MyEvent += null, EventArgs.Empty, bar.Object);
一切都如我所愿。谁能解释为什么调用需要三个参数?
谢谢
【问题讨论】:
-
你能发布一个编译并包含
IBar类的示例吗?修复明显的编译错误后,您的示例在 .NET 4.0 和 Moq 4.2 下工作。 -
抱歉,刚刚破解了它。它没有编译真是令人惊讶 ;-) 现在它应该
标签: c# unit-testing moq