2012-10-22 10 views
6

Ich versuche, ein WPF MVVM View Model zu erstellen, das eine Abhängigkeit System.Timing.Timer injiziert hat, und möchte das Ansichtsmodell mit Moq testen.Verspottung eines C# -Timers mit Moq

Ich schrieb eine dünne Wrapper um die Timer Klasse, die eine Schnittstelle ITimer hat, aber bin mir nicht sicher über die beste Möglichkeit, den Beitrag des Timers wirklich zu testen, um die Klasse. Gibt es eine gute Möglichkeit, ein verspottetes Ereignis zu erzwingen? Hat jemand anderes eine bessere Technik?

+3

Werfen Sie einen Blick auf diese [Frage] (http://stackoverflow.com/questions/11495830/unit-testing-a-class-that-uses-a-timer) und diese [Frage] (http: // stackoverflow.com/questions/8940982/how-can-i-run-the-event-handler-assigned-to-mock) –

+0

Danke, ich hatte etwas für diese Art von Dingen gegoogelt, aber meine Anfragen auf Ereignisse konzentriert im Allgemeinen eher als mit Timern, und konnte nicht viele gute Ergebnisse finden. –

Antwort

3

Sie sollten Ihren Code in isolation testen. Ansonsten wissen Sie nicht, ob sich Ihr Code wie erwartet verhält oder ob es eine Nebenwirkung in der externen Abhängigkeit gibt. Das Erstellen von Mock-Wrappern für externe Ressourcen (Konfigurationsdateien, Timer usw.) ist die einzige Möglichkeit, Ihr SUT von externem Code zu trennen.

+0

Ich weiß alles über das Konzept der Isolation, daher die zinnartisable Hülle, die ich um 'Timer' geschrieben habe. Ich war mehr an Techniken interessiert, mit denen ich speziell über die Ereignisse spottete. Es scheint, dass Ufuks Kommentar ist, wonach ich suche. –

+0

Das Raising-Event ruft einfach eine Aktion auf deinem Modell durch Mock auf. Ich sehe darin nichts Seltsames. –