2011-12-21 9 views
7

私はイベントを含む偽のクラスを持っています。私のコードはそのイベントに登録する必要があり、私はそれをテストしたい。私はNUnitでFakeItEasyを使用しています。私のコードがそのイベントに実際に加入していることを確認する方法を探しています。イベントがFakeItEasyで購読されていることをアサートする方法は?

ありがとうございます!

+3

ちょっとした提案:あなたのコードがイベントを購読していることをテストするのではなく、そのようなイベントを受け取ったときに実際に何かを行うことをテストするだけです。このようにして、 "イベントが発生するとFooが呼び出される"のようなテストを行うことができます。これは何が起こるべきかを記述します。 –

答えて

10

私は、あなたがむしろイベントを発生させ、購読したいハンドラが呼び出されたことを確認するという意見に同意します。しかし、ハンドラが添付された天気をチェックする方法があり、非常にきれいではないと思った:

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」の部分を省略することができます取り付けたことを確認したい場合は

0

できる最大値は、イベントがnullに等しいかどうかをチェックすることです。何かがサブスクライブされているかどうかを返します。
それ以外の場合は、イベントに登録されているハンドラの数や数を知ることができません。

関連する問題