繁体   English   中英

如何在 xunit 中测试引发的事件?

[英]How to test in xunit that Event was raised?

我在课堂上定义了这样的简单事件

class Request 
{
   protected virtual void OnStateChanged()
   {
      StateChanged?.Invoke(this, EventArgs.Empty);
   }

   public event EventHandler StateChanged;

   public void Approve()
   {
      OnStateChanged();
   }

}

我如何 xunit 这个事件被引发?

我尝试了一行事件处理程序实现

bool eventRaised = false;
request.StateChanged += (obj, eventArgs) => eventRaised = true;
request.Approve();
Assert.True(eventRaised);

它有效,但有没有更好的方法? 我没有弄清楚,如何使用Assert.Raises()

这是普遍建议的方法

但是,以下示例显示了如何使用Assert.Raises()来测试您提供的类的事件

var request = new Request();

var evt = Assert.Raises<EventArgs>(
    h => request.StateChanged += h,
    h => request.StateChanged -= h,
    () => request.Approve());

Assert.NotNull(evt);
Assert.Equal(request, evt.Sender);
Assert.Equal(EventArgs.Empty, evt.Arguments);

但是,您的事件处理程序需要是通用委托

public event EventHandler<EventArgs> StateChanged;

而不仅仅是EventHandler以便Assert.Raises按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM