如何在ASP.Net中对事件进行单元测试?

时间:2012-09-30 21:10:02

标签: c# asp.net unit-testing events

我已经使用自定义事件参数和相关的提升方法定义了两个事件。现在我想知道该事件的测试内容和方式。我应该如何分析代码以找到单元测试的候选者?

1 个答案:

答案 0 :(得分:4)

我测试事件的方式如下:

假设这是你的对象:

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;