7

イベントを含む偽のクラスがあります。私のコードはそのイベントをサブスクライブする必要があり、それをテストしたいと思います。NUnitでFakeItEasyを使用していて、コードが実際にそのイベントにサブスクライブしていることを確認する方法を探しています。

ありがとう!

4

2 に答える 2

13

イベントを発生させて、サブスクライブしたいハンドラーが呼び出されたことを確認するだけでよいというコメントに同意します。しかし、ハンドラーがアタッチされているかどうかを確認する方法がありますが、あまりきれいではありません。

public interface IHaveAnEvent
{
    event EventHandler MyEvent;
}

// In your test...
var fake = A.Fake<IHaveAnEvent>();

var handler = new EventHandler((s, e) => { });

fake.MyEvent += handler;

A.CallTo(fake).Where(x => x.Method.Name.Equals("add_MyEvent")).WhenArgumentsMatch(x => x.Get<EventHandler>(0).Equals(handler)).MustHaveHappened();

ハンドラーがアタッチされたことを確認したいだけの場合は、「WhenArgumentsMatch」部分を省略できます。

于 2011-12-23T14:20:18.543 に答える
0

あなたができる最大のことは、イベントがnullに等しいかどうかを確認することです。何かがそれにサブスクライブされているかどうかを返します。
そうしないと、イベントにサブスクライブされているハンドラーがどれか、またはいくつあるかを知ることができません。

于 2011-12-21T15:12:30.757 に答える