如何断言已经使用FakeItEasy订阅了一个事件?

时间:2011-12-21 15:05:38

标签: c# unit-testing nunit fakeiteasy

我有一个包含事件的假类。我的代码应该订阅该事件,我想测试它。我正在使用FUnItEasy和NUnit,我正在寻找一种方法来检查我的代码是否真的订阅了该事件。

谢谢!

2 个答案:

答案 0 :(得分:10)

我同意评论建议你只是提出事件并检查你想要订阅的处理程序是否已被调用。但有一种方法可以检查一个处理程序是否附加,认为不是很漂亮:

public interface IHaveAnEvent
{
    event EventHandler MyEvent;
}

// In your test...
var fake = A.Fake<IHaveAnEvent>();

var handler = new EventHandler((s, e) => { });

fake.MyEvent += handler;

A.CallTo(fake).Where(x => x.Method.Name.Equals("add_MyEvent")).WhenArgumentsMatch(x => x.Get<EventHandler>(0).Equals(handler)).MustHaveHappened();

如果您只是想检查是否附加了任何处理程序,您可以省略“WhenArgumentsMatch”部分。

答案 1 :(得分:0)

您可以做的最大值是检查事件是否等于null,它将返回是否订阅了某些内容。
否则,您无法知道订阅哪个或哪些处理程序。