2010-08-01 25 views
5

के लिए मोक का उपयोग करते हुए प्रिज्म इवेंट एग्रीगेटर का मज़ाक उड़ाते हुए मुझे यह सुनिश्चित करने के लिए एक यूनिट टेस्ट में मोक का उपयोग करने के बारे में कुछ सलाह चाहिए कि परीक्षण के तहत मेरी कक्षा व्यवहार कर रही है। परीक्षण के तहत कक्षा एक इवेंट एग्रीगेटर (प्रिज्म से) घटना प्रकाशित करती है और मुझे यह दावा करने का कुछ तरीका चाहिए कि यह घटना मेरे परीक्षण में उठाई गई है।यूनिट परीक्षण

मेरे पास काम पर बहुत अधिक संसाधन नहीं है और मुझे यह पता लगाना मुश्किल लगता है कि इसे कैसे सेट अप किया जाए।

मेरे पास है: -

public SomeEvent : CompositePresentationEvent<SomeEvent> 
{ 
    EventPayload 
} 

public SomeClass 
{ 
    void Allocate(){EventAggregator.Publish<SomeEvent>} 
} 

public SomeService : IService 
{ 
    SomeService(){ EventAggregator.Subscribe<SomeEvent>(DoSomething)} 
    void DoSomething(SomeEvent evt){} 
} 

मुझे लगता है कि अगर अपने परीक्षण SomeClass के लिए है इस बात की पुष्टि करने के लिए है कि एक SomeEvent संदेश अगर मैं SomeClass.Allocate फोन प्रकाशित किया जा रहा है की जरूरत है। यह कैसे किया जाता है?

क्या मुझे यह भी सत्यापित करने की आवश्यकता है कि एक मजाकिया कुछ सेवा कुछ Event प्राप्त कर रही है? या यह एक अलग इकाई परीक्षण है जो कुछ सेवा इकाई परीक्षण से संबंधित है और कुछ क्लास नहीं है?

किसी भी घटना में, यह सुनिश्चित न करें कि इनमें से कोई भी सेट कैसे सेट करें ताकि किसी भी सलाह की सराहना की जा सके।

उत्तर

8

आप एक IEventAggregator साथ SomeClass की आपूर्ति करेगा, जो आप परीक्षण के दौरान एक नकली की आपूर्ति करने की अनुमति देगा:

public SomeClass(IEventAggregator eventAggregator) 
{ 
    _eventAggregator = eventAggregator; 
} 

फिर अपने परीक्षण कुछ इस तरह दिखेगा:

var fakeEventAggregator = new Mock<IEventAggregator>(); 
var fakeEvent = new Mock<SomeEvent>(); 

fakeEventAggregator. 
    Setup(x => x.GetEvent<SomeEvent>()). 
    Returns(fakeEvent.Object); 

var test = new SomeClass(fakeEventAggregator.Object); 
test.Allocate(); 

fakeEvent.Verify(x => x.Publish(It.IsAny<SomeEventArgs>())); 

इन इकाई कर रहे हैं परीक्षण तब आप SomeService परीक्षणों में सदस्यता को पूरी तरह अलग से जांचेंगे। आप परीक्षण कर रहे हैं कि SomeClass सही ढंग से एक ईवेंट प्रकाशित करता है और SomeService प्रक्रिया के लिए एक ईवेंट दिया जाता है जब सही ढंग से व्यवहार करता है।

+0

यह उदाहरण "कन्स्ट्रक्टर निर्भरता इंजेक्शन" का उपयोग करता है, क्योंकि IEventAggregator पर निर्भरता कुछ क्लास कन्स्ट्रक्टर के दौरान इंजेक्शन दी जाती है। –

+0

महान जवाब, इससे मुझे बहुत मदद मिली। – user630190

संबंधित मुद्दे