2011-12-21 14 views
7

Etkinlik içeren sahte bir dersim var. Kodum o etkinliğe abone olmalı ve bunu test etmek istiyorum. NUnit ile FakeItEasy kullanıyorum ve kodumun bu etkinliğe gerçekten abone olup olmadığını kontrol etmenin bir yolunu arıyorum.Bir Olayın FakeItEasy ile Abone Olduğunu Nasıl Anlayabiliriz?

Teşekkürler!

+3

Sadece bir öneri: Kodunuzun etkinliğe abone olduğunu test etmek yerine, yalnızca bu tür bir etkinlik aldığında gerçekten bir şey yaptığını test edin. Bu şekilde "Ne zaman gündeme geldiyse Foo çağrılır" gibi bir test yapıp neyin olması gerektiğini açıklar. –

cevap

10

Etkinliği yükseltmeyi ve abone olmak istediğiniz işleyicinin çalıştırıldığını kontrol etmeyi öneren yoruma katılıyorum. Ama bir işleyici bağlıydı Hava kontrol etmek için bir yol yoktur, çok güzel değil düşündü:

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

sadece herhangi işleyici siz "WhenArgumentsMatch" bölümünü atlayabilirsiniz bağlı olduğunu kontrol etmek istiyorsanız

.

0

Yapabilecekleriniz, etkinliğin null değerine eşit olup olmadığını kontrol etmektir, bir şeyin ona abone olup olmadığını iade eder.
Aksi halde, bir etkinliğe hangi veya çok sayıda işleyicinin abone olduğunu bilemezsiniz.

İlgili konular