Unit Tests mit Scheinklassen - Wie?

SixDark

Erfahrenes Mitglied
Hallo!

Ich beschäftige mich seit einiger Zeit mit Unit Tests unter NUnit und Testdriven.NET. Nun habe ich mal eine Verständnisfrage.
Ich habe folgenden Code:

Code:
public string meineZuTestendeFunktion(string Irgendwas)
{
  (einiger Code...)

  string test = mySecondClass.gibIrgendwasZurueck("Test");

  (einiger Code...)
  return result;
}

Es wird also in einer zu testenden Funktion eine weitere Klasse aufgerufen, die ein Ergebnis liefert, mit dem weitergearbeitet wird.
Ich muss nun diese Klasse irgendwie als Scheinklasse anlegen und meiner Test-Funktion beibringen, dass nicht die Orginal-Klasse angesprochen wird, sondern eben eine Scheinklasse.

Wie aber tut man so etwas?

Code:
[Test]
public void testFunktion()
{
  zuTestendeKlasse c = new zuTestendeKlasse();
  string result = c.meineZuTestendeFunktion("Hallo");

  Assert.AreEqual("Hallo Test", result);
}

Wie sage ich jetzt über meine Testfunktion, dass er in der zu testenden Funktion nicht die Klasse "mySecondClass" im Orginal anspricht, sondern eine Scheinklasse, die ein mir bekanntes Ergebnis liefert? Da die zu testenden Klasse ja in ihrem Orginal Kontext läuft, ruft sie automatisch ja auch ihre Orginal referenzierte Klasse auf... Irgendwie steh ich da grad völlig auf'm Schlauch...

Ich hoffe ich habe nicht zu unverständlich geschrieben.
Vielen Dank schon mal für Eure Mühe mir zu helfen!

Viele Grüße.
..::SD::..
 
Warum an dieser Stelle eine "Scheinklasse" verwenden? Kannst du mir den Hintergrund bitte näher erklären? Willst du vor der Implementierung die Tests schreiben? Oder was genau bezweckst du?
 
Ich möchte die zu testende Klasse von allen anderen isolieren. Somit erhoffe ich mir ein Testergebnis, welches auch repräsentativ für mich ist.

Oder hab ich etwas falsch verstanden in Sachen Testing?

MfG
..::SD::..
 
Bevor du die Klasse mit der Funktion "meineZuTestendeFunktion" testest, wirst du (normalerweise) sowiso die Klasse der Instanz "mySecondClass" testen, wenn du dann einen Fehler in der zweiten Klasse findest, kannst du dir sicher sein, dass der Fehler nicht in den Klassen liegt, die du in der aktuellen Klasse verwendest ;-)

Lg, Yanick
 
Ja, das dachte ich mir zuerst auch, aber das ist nicht ganz im Sinne von Softwaretests. Weil dann müsste ich generell davon ausgehen, dass die anderen Klassen funktionieren. Was aber, wenn der Test für eine tiefer liegende Klasse nicht ordentlich programmiert wurde und er somit evtl. nicht brauchbar ist?

MfG
..::SD::..
 
Hm... ich würde sagen du musst zuerst die anderen Klassen testen. Falls dies schon erledigt ist, musst du eig. darauf vertrauen dass diese Funktionen, was anderes wird dir ja sowiso nicht überbleiben.

Wenn du beispielsweise Klassen aus dem .NET Framework benützt, hast du auch nur zwei Möglichkeiten:
  • Du testest sie nochmal - wenn du Zeit und Lust hast..
  • Du vertraust darauf und weißt, dass sie schon getestet wurden
Lg, Yanick
 
Ich hatte nicht vor die Klassen aus dem Framework zu testen - das wäre auch ziemlich sinnfrei!
Wenn ich aber darauf vertrauen muss, dass andere Klassen, die z.B. auch aus anderen Abteilungen kommen wirklich funktionieren und die Tests, die für diese existieren nicht nur "Dummy's" sind, dann kann ich das Testen auch sein lassen!
Es muss doch eine Möglichkeit geben, die Klassen voneinander zu isolieren. Die komische Test-Foundation-Gruppe hat es ja so in ihre Standards geschrieben. Nur wie - das haben sie wohl vergessen...

VG
..::SD::..
 
Zurück