我可以测试事件被触发的断言吗?像这样:

[TestMethod]
public void EventFiresWhenChangingProperty()
{
    var sut = new SystemUnderTest();
    var eventRegister = new EventRegister(sut.PropertyChanged);
    sut.AnyProperty = "new value";
    Assert.EventWasFired(eventRegister);
}


当然,我可以创建一个事件处理程序,该事件处理程序将一些记录放入测试上下文或仅由该特定测试读取的实例变量中,但这似乎有点麻烦。我正在寻找类似上面的代码的东西。

最佳答案

我通常将匿名方法连接为事件侦听器,并在其中设置可测试的值,如下所示:

var sut = new SystemUnderTest();
bool eventWasRaised = false;
sut.PropertyChanged += (s, e) => eventWasRaised = true;
sut.AnyProperty = "new value";
Assert.IsTrue(eventWasRaised);


这样可以减少管道的数量。如果要添加一些清理操作,可以创建一个保存事件处理程序的变量:

var sut = new SystemUnderTest();
bool eventWasRaised = false;
EventHandler eh = (s, e) => eventWasRaised = true;
sut.PropertyChanged += eh;  // attach event handler
sut.AnyProperty = "new value";
Assert.IsTrue(eventWasRaised);
sut.PropertyChanged -= eh;  // detach event handler

关于c# - 有没有办法对事件进行断言?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1706176/

10-13 05:10