| 

.NET C# Java Javascript Exception

0
Gibt es eine spezielle Unterstützung von Nunit wenn man mit Callbacks arbeitet? Oder eine Best Practice, wie man das am besten anstellt?

Bisher komme ich zurecht, nur stelle ich mir vor, dass ich mit folgendem Vorgehen bald sehr komplizierte Tests schreiben werde. Zumindest sobald mein Code wächst und ich mehr im Detail testen will.

Hier ein vereinfachtes Beispiel meiner derzeitigen Tests mit Callbacks. Die geteste Klasse ruft einen Delegaten auf sobald bestimmte XML Knoten gefunden werden. Das xml-Objekt wird im Test SetUp erstellt. Im Beispiel teste ich ob das gefundene Element aus dem XML richtig erkannt wird und speichere die erkannten Daten in Attributen meiner TestKlasse. Diese kann ich anschließend per Assert testen.

[Test]
public void NewElement()
{
String xmlString = @"<elem></elem>";

this.xml.InputStream = new StringReader(xmlString);
this.xml.NewElement += this.NewElementCallback;

this.xml.Start();

Assert.AreEqual("elem", this.elementName);
Assert.AreEqual(0, this.elementDepth);
}

private void NewElementCallback(string elementName, int elementDepth)
{
this.elementName = elementName;
this.elementDepth = elementDepth;
}
News:
12.08.2010
Vash 440 2 6
Vash 440 2 6
1 Antwort
1
Hallo,

eine direkte Unterstützung von NUnit gibts nicht. Der Test kann aber ein wenig mit anonymen Methoden vereinfacht werden:
[Test]
public void NewElement()
{
String xmlString = @"<elem></elem>";

this.xml.InputStream = new StringReader(xmlString);
this.xml.NewElement += (elementName, elementDepth) =>
{
Assert.AreEqual("elem", elementName);
Assert.AreEqual(0, elementDepth);
}

this.xml.Start();
}

Dies erspart wenigsten die Methode im Methode in der Test-Klasse explizit zu erstellen.

mfG Gü
12.08.2010
gfoidl 9,4k 3 5
1
Anonyme Methoden sind da schon ganz praktisch. Nur sollte man auf jeden Fall auch noch darauf achten bzw. es testen, dass das Event auch ausgelöst wird. In deinem Beispiel hättest du auch einen bestandenen Test auch wenn NewElement nicht ausgelöst wird.
Noffls 15.01.2011
1
Die einfachste Lösung für dieses Problem ist, eine Zählervariable außerhalb der anonymen Methode mit auf 0 zu initialisieren, sie innerhalb der anonymen Methode um 1 zu erhöhen, und am Ende der Testmethode zu prüfen, ob der Wert auf 1 steht.

Damit ermittelt man nicht nur, ob der Eventhandler überhaupt ausgelöst wurde, sondern auch, dass er nicht mehr als einmal ausgelöst wurde.
Golo Roden 15.01.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH