4

カスタム イベント引数と関連付けられたレイズ メソッドを使用して 2 つのイベントを定義しました。今、私はイベントが何をどのようにテストされるべきか疑問に思っています。単体テストの候補を見つけるためにコードを分析するにはどうすればよいですか?

4

1 に答える 1

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());
        }
    }
}

したがって、Subject Under Test は:MyEventRaiserであり、メソッドをテストしたいとしますProcess。特定の条件が満たされたときにイベントが発生することをテストする必要があります。それ以外の場合、イベントは発生しません。

これを行うには、このフレームワーク (テストで常に使用する) FluentAssertionsを使用します。このフレームワークは、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;
于 2012-09-30T22:17:22.290 に答える