2009-03-12 16 views
3

Composite Application Library olay toplayıcısını kullanıyorum ve birim sınamamda kullanmak için IEventAggregator arabirimi için bir alay oluşturmak istiyorum.CAL EventAggregator'ı Moq ile eşleştiriyor

Ben bu görev için Moq kullanarak planlıyorum ve bir örnek testi şu ana kadar şuna benzer:

var mockEventAggregator = new Mock<IEventAggregator>(); 
var mockImportantEvent = new Mock<ImportantEvent>(); 
mockEventAggregator.Setup(e => e.GetEvent<SomeOtherEvent>()).Returns(new Mock<SomeOtherEvent>().Object); 
mockEventAggregator.Setup(e => e.GetEvent<SomeThirdEvent>()).Returns(new Mock<SomeThirdEvent>().Object); 
// ... 
mockEventAggregator.Setup(e => e.GetEvent<ImportantEvent>()).Returns(mockImportantEvent.Object); 

mockImportantEvent.Setup(e => e.Publish(It.IsAny<ImportantEventArgs>())); 

// ...Actual test... 

mockImportantEvent.VerifyAll(); 

Bu iyi çalışır, ancak bazı akıllı yolu olup olmadığını, biliyorum istiyorum Kodumun karşılaşabileceği her olay türü için boş bir alay tanımlamaktan kaçınmak (SomeOtherEvent, SomeThirdEvent, ...)? Elbette tüm olaylarımı [TestInitialize] yönteminde bu şekilde tanımlayabilirim, ancak daha zekice bir yöntem olup olmadığını bilmek isterim.

var mockEventAggregator = new Mock<IEventAggregator>{ DefaultValue = DefaultValue.Mock }; 

mockEventAggregator dönüş tüm iç içe nesneler için alay yapacaktır: :-)

cevap