Wie kann ich ein Ereignis auslösen, wenn eine Methode aufgerufen wird, mithilfe Moq?
Habe ich ein interface wie dieses:
public interface IMyInterface
{
event EventHandler<bool> Triggered;
void Trigger();
}
Und ich hab eine ironisierte Objekt in meinem unit-test wie diesem:
private Mock<IMyInterface> _mockedObject = new Mock<IMyInterface>();
Möchte ich etwas wie das hier tun:
//pseudo-code
_mockedObject.Setup(i => i.Trigger()).Raise(i => i.Triggered += null, this, true);
Aber es sieht nicht wie Raise
steht auf der ISetup
Schnittstelle, die zurückgegeben wird. Wie mache ich das?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre pseudo-code war fast vor Ort auf. Mussten Sie
Raises
stattRaise
. Überprüfen Sie die Moq Quickstart: Veranstaltungen für Versionen Moq 4.x und du wirst sehen wo du den Fehler gemacht.Hier ist die snippet-form GitHub
Raise
erfolgt auf der mock sich nicht das setupSo, ich habe herausgefunden, was ich falsch machte. Ich werde post die Antwort hier aber geben, den Kredit zu Nkosi, weil ich nicht wirklich Fragen, die Frage richtig, und er hat eine Menge nützlicher Informationen.
Mit einer async-Methode auf ein Modell ein, müssen Sie zuerst angeben, dass es gibt eine Aufgabe, die vor haben, können Sie die trigger-events. Also in meinem Beispiel (der Gedanke, dass ich hätte
Task Trigger();
als die Signatur der Methode, dies ist der code den ich gesucht habe:Offenbar diese können vereinfacht werden, noch weiter in C# 4.6, zu diesem:
Raises
, richtig? nichtRaise
Erweiterung auf SoaperGEM Antwort, alle Methoden, die etwas zurückgeben (egal welcher) muss der Rückgabewert angegeben werden, bevor das Ereignis ausgelöst hat. Da die async-Methoden zurück
Task
, async-Methoden fallen in diese Kategorie. Ich habe eine Methode, die zurückgibt einenstring
, und ich versuchte herauszufinden, warum konnte ich nicht auslösen, das Ereignis mit dem Mock-Objekt. Dann habe ich versucht, die Rückkehr zum ersten mal und es hat Prima funktioniert.Unter SoaperGEM dem Beispiel und unter der Annahme
Trigger()
gibt einen string zurück: