4
我用自定义事件参数和相关的提升方法定义了两个事件。现在我想知道应该怎样测试事件。我应该如何分析代码才能找到单元测试的候选人?如何在ASP.Net中对事件进行单元测试?
我用自定义事件参数和相关的提升方法定义了两个事件。现在我想知道应该怎样测试事件。我应该如何分析代码才能找到单元测试的候选人?如何在ASP.Net中对事件进行单元测试?
我测试赛的方式如下:
假设这是你的对象:
public class MyEventRaiser
{
public event EventHandler<string> MyEvent = delegate { };
public void Process(string data)
{
// do something interestuing
Thread.Sleep(2000);
if (!string.IsNullOrEmpty(data))
{
this.MyEvent(this, data + " at: " + DateTime.Now.ToString());
}
}
}
因此你的主题下测试是:MyEventRaiser
,你要测试的方法Process
。您需要测试在满足特定条件时引发的事件,否则不应提升事件。
要做到这一点,我用这个框架(我用在我的测试总是)FluentAssertions,这framewrok可以与任何测试引擎像MSTest的,NUnit的,MSpec,的xUnit使用等
测试看起来像:
[TestClass]
public class CustomEventsTests
{
[TestMethod]
public void my_event_should_be_raised()
{
var sut = new MyEventRaiser();
sut.MonitorEvents();
sut.Process("Hello");
sut.ShouldRaise("MyEvent").WithSender(sut);
}
[TestMethod]
public void my_event_should_not_be_raised()
{
var sut = new MyEventRaiser();
sut.MonitorEvents();
sut.Process(null);
sut.ShouldNotRaise("MyEvent");
}
}
您需要使用下面的命名空间:
using FluentAssertions;
using FluentAssertions.EventMonitoring;
感谢,FluentAssertions很酷 –