7

我有一个包含事件的假类。我的代码应该订阅该事件,我想测试它。我正在将 FakeItEasy 与 NUnit 一起使用,并且我正在寻找一种方法来检查我的代码是否确实订阅了该事件。

谢谢!

4

2 回答 2

13

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

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”部分。

于 2011-12-23T14:20:18.543 回答
0

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

于 2011-12-21T15:12:30.757 回答