非同期イベントが発生する必要があることを確認する必要がある単体テストを作成するときは、通常、次のようにします。
[Test]
public void test()
{
var eventRaised = new ManualResetEvent(false);
subject.SomeEvent += (s, e) => { eventRaised.Set(); };
// Do something which should have triggered the event
Assert.True(eventRaised.WaitOne(5000), "Event was not raised.");
}
ただし、私の現在のケースでは、イベントは外部システムからの別のイベントに基づいて発生し、実際には重複したイベントを取得していることに気付きました。これは良くありません。この他のシステムを変更することはできないため、クラス内の重複するイベントを除外する必要があります。幸いなことに、重複しているかどうかを確認する簡単な方法がありますが、フィルタリングが正しく機能していることを確認するには、単体テストをどのように変更すればよいか疑問に思っています。
特定のアクションが実行された後、特定のイベントが 1 回だけ発生することを確認する単体テストをどのように記述しますか?