2012-10-16 20 views
5

L'applicazione che sto testando è piena di eventi sulla base di delegati personalizzati, come ad esempio questo:Come faccio a generare un evento in FakeItEasy per un evento basato su un delegato personalizzato?

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

voglio deridere la classe che produce questi eventi ed aumentare questi eventi alla classe in prova.

So che FakeItEasy può utilizzare Raise.With() per aumentare gli eventi con le tradizionali firme degli eventi di MyHandler(object sender, EventArgs e) o MyHandler(EventArgs e), ma non so cosa fare nella mia situazione.

Qualche idea?

+0

Ho incontrato esattamente la stessa cosa proprio oggi. Qualcuno può aiutare qui? – jdscolam

+1

Credo che la risposta sia che FakeItEasy non può farlo. La mia soluzione era di refactoring il mio evento per prendere EventArgs. – pduncan

+1

C'è un problema sollevato per questo https://github.com/FakeItEasy/FakeItEasy/issues/30 –

risposta

0

È sempre possibile rendere virtuale ChangeYourName e sostituire il metodo.

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

Se questo non è quello che volevi, suppongo che se ChangeYourName è pubblica si può solo creare la vostra classe falso

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

class.ChangeYourName("tim"); 
Problemi correlati