2012-10-16 5 views
5

आवेदन मैं परीक्षण कर रहा हूँ इस जैसे कस्टम प्रतिनिधियों, के आधार पर की घटनाओं से भरा है:कस्टम प्रतिनिधि के आधार पर एक कार्यक्रम के लिए मैं FakeItEasy में कोई ईवेंट कैसे बढ़ा सकता हूं?

public delegate void NameChangedHandler(string name); 
public event NameChanged OnNameChanged; 
... 
public void ChangeYourName(string newName) 
{ 
    if(NameChanged != null) 
     NameChanged(newName); 
} 

मैं इन घटनाओं के उत्पादन वर्ग बाहर नकली और परीक्षण के अंतर्गत वर्ग के लिए इन घटनाओं को बढ़ाने के लिए चाहते हैं।

मुझे पता है कि FakeItEasy MyHandler(object sender, EventArgs e) या MyHandler(EventArgs e) के पारंपरिक घटना हस्ताक्षरों के साथ घटनाओं को ऊपर उठाने के लिए Raise.With() उपयोग कर सकते हैं, लेकिन मैं क्या मेरी स्थिति में क्या करना नहीं जानता।

कोई विचार?

+0

मैंने आज ठीक उसी चीज़ में भाग लिया है। क्या कोई यहां मदद कर सकता है? – jdscolam

+1

मुझे विश्वास है कि जवाब यह है कि FakeItEasy यह नहीं कर सकता है। मेरा समाधान EventArgs लेने के लिए मेरे कार्यक्रम को दोबारा शुरू करना था। – pduncan

+1

इस https://github.com/FakeItEasy/FakeItEasy/issues/30 के लिए कोई समस्या उठाई गई है –

उत्तर

3

बना सकते हैं FakeItEasy 2.0.0 के रूप में, यह अब संभव है।

Raising Events documentation topic पूरी कहानी है, लेकिन सार है कि आप

fake.OnNameChanged += Raise.With<NameChanged>(newName); 

प्रयोग करेंगे हमेशा की तरह, घटना आभासी होना चाहिए है।

0

आप हमेशा ChangeYourName आभासी बना सकते हैं और विधि को प्रतिस्थापित कर सकते हैं।

A.CallsTo(()=>fakeClass.ChangeyourName(A<string>._)).Invokes((x)=>invokeMockEvent(x)); 

अगर ऐसा नहीं है कि तुम क्या चाहते थे, मुझे लगता है अगर ChangeYourName सार्वजनिक है तो आप बस अपने नकली कक्षा

var class = new Class(); 
class.OnNameChanged += (x)=> 
{ 
    Assert.AreEqual(x,"tim"); 
}; 

class.ChangeYourName("tim"); 
संबंधित मुद्दे