Laden...

Mocks als Basis für UnitTests?

Erstellt von inTrance vor 15 Jahren Letzter Beitrag vor 15 Jahren 702 Views
inTrance Themenstarter:in
170 Beiträge seit 2005
vor 15 Jahren
Mocks als Basis für UnitTests?

Hey 🙂

Ich bin in letzter Zeit immer stärker involviert in das Testen von Anwendungen. Jetzt möchte ich auch Mocks nutzen, da sie doch die Möglichkeiten erheblich erweitern.

Allerdings erscheint es mir so, als würde sich auf den ersten Blick eine gewisse Redundanz ergeben. Angenommen:

Wir haben eine Klasse A, welche abhängig von B ist.

Wir schreiben die Tests für A und einen Mock von B.

Jetzt können wir A wunderbar testen und programmieren.

Bleibt B. Eigentlich haben wir durch den Mock ja schon eine ideale Testbasis für B. Der Mock beschreibt ja das erwartete Verhalten von B. Trotz allem muss jetzt für B wieder ein eigenständiger Test geschrieben werden - das erscheint mir redundant.

Habe ich hier einen denkfehler? Oder ist der Workflow falsch? Oder ist es einfach so? Oder gibt es Abkürzungen, die aus dem Mock quasi einen Stub der Tests / der Klasse erstellen?

Viele Grüße

104 Beiträge seit 2004
vor 15 Jahren

Hallo inTrance,

meiner Meinung nach macht es nur Sinn einen Mock für Klasse B zu schreiben, wenn Klasse B nicht direkt oder nur mit Umständen in einem Test verwendet werden kann.

z.B. Wenn Klasse B einen Dialog öffnet in dem auf eine Benutzerinteraktion gewartet wird (siehe auch: Mock-Objekte@Wiki).

Eigentlich haben wir durch den Mock ja schon eine ideale Testbasis für B

Meinst du damit das Klasse B durch die Tests für Klasse A indirekt mitgetestet wird?
Wenn du das meinst, ja. Man würde durch das schreiben eines Mocks + das separate Testen von Klasse B redundanten Code (bzw. redundante Testfälle) erzeugen. Allerdings würde man nur einen Mock erstellen, wenn man dadurch einen Vorteil bekommt (z.B bessere Performance der Tests, reproduzierbare Testbedingungen usw.). Man würde sich also diesen Vorteil über die Redundanz der Tests erkaufen.

Grüße

Schaut mal im IRC vorbei:
Server: irc.euirc.net
Channel: #C#

1.134 Beiträge seit 2004
vor 15 Jahren

Diese Diskussion sehe ich interessanterweiser immer wieder wenn es um Unit Tests geht.

An aller erster Stelle denke ich sollte man sich klar machen das der Mockup nur den Unit Tests gilt und dementsprechend auch sehr speziell dafür geschrieben wird.

Wenn man eine Komponente A testet dann soltle der Mockup ja nicht nur immer "alles ging glatt" sagen sondern auf wunsch sollte der Mockup auch Verhalten simulieren die einen nicht ganz optimalen ablauf darstellen.

Z.bsp. Bei Folgender Struktur

ComponentA ---Verwendet---> PersistenceComponent

Kann es ja sein dass die PersistenceComponent komponente einen Wert zurückliefert der sagt dass daten nicht persistiert werden konnte. In diesem Fall sollte Component A in einem Definierten Zustand sein.

Entweder sollte A dann immer eine Exception werfen oder eben nie. Um diesen Fall getestet und dokumentiert zu haben ist es wichtig dass der MockUp für die Persistence sehr sepzeill für die Fälle geschrieben ist die A benötigt.

Auf der anderen Seite gibt es sicher bei einigen Mockups / Szenarien, Funktionalität die immer exakt gleich ist.

Deswegen komme ich für mich zu dem Schluss dass man i.d.R. Mockups immer speziell für eine Component geschrieben sein sollten aber es durch es Templates geben darf, die der Entwickler dann für Mockups optional verwenden darf.

In gefühlten 90% der Fälle benötigt man meiner Erfahrung nach aber eigene neue und vorallem spezielle Mockups um gezielt zu testen.

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)