Seite 1 von 1

Testen von Events

BeitragVerfasst: Sa 12. Mär 2011, 18:26
von Christoph Jüngling
Moin,

ab und zu lernt man ja was auf so einer AEK :ugeek: Also habe ich irgendwann mal angefangen, meine Klassen per Event miteinander reden zu lassen.

Dann hat mir mal "jemand" etwas vom Testen erzählt, und nun wollte ich beides zusammenbringen: Eine Klasse wirft ein Event, meine Testklasse fängt es und überprüft, ob es das richtige ist und evtl. auch ob es die richtigen Parameter mitliefert.

Für Fehler (Errors, Exceptions) funktioniert das ja schon mit "Assert.Throws", aber wie geht das mit Events?

cu

Chris

Re: Testen von Events

BeitragVerfasst: Sa 12. Mär 2011, 18:56
von Josef Pötzl
Hallo!

Hast du es nicht gerade eine funktionierende Variante beschrieben? ;)

Im Prinzip könnte man eine Mock-Klasse schreiben, die das Abfangen des Ereignisses übernimmt und aus der man später z. B. über Eigenschaften abfragen kann, ob alles passte.
MIr ist das allerdings zu aufwendig, daher nutze ich meistens die Testklasse selbst um auf die Ereignisse zu reagieren.
In Modulvariablen speichere ich die benötigten Daten ab, die ich im Assert-Ausdruck verwende bzw. stelle deren Wert ein, um ihn in der Ereignisbehandlung zu verwenden.

Beispiel:
Code: Alles auswählen

Private WithEvents m_UserHandler As UserHandler

[...] '  UserHandler-Instanz wird über Setup() erzeugt und über Teardown() wieder zerstört. Die Referenz ist in m_UserHandler gespeichert.

Public Sub UserName_ReChangeUserNameInEvent_UseNameAssignedByEventProc()

   Const Expected As String = "xyz"
   m_NewUserName = "xyz"

   Dim Actual As String
   m_UserHandler.UserName = "abc"
   
   Actual = m_UserHandler.UserName
   Assert.That Actual, Iz.EqualTo(Expected)

End Sub

Private Sub m_UserHandler_UserBeforeChange(ByRef NewUserName As String, Cancel As Boolean)
   If StrPtr(m_NewUserName) <> 0 Then
      NewUserName = m_NewUserName
   End If
End Sub
 


mfg
Josef

Re: Testen von Events

BeitragVerfasst: So 13. Mär 2011, 12:37
von Christoph Jüngling
Irgendwie naheliegend, manchmal ist man ja echt blind :oops: