UnitTesting Mock Stub Klärungsbedarf

03/12/2009 - 11:35 von ChristianH | Report spam
Hi,

beim Schreiben von meinen UnitTests ersetze ich externe Abhàngigkeiten der
zu testenden Klasse durch ein Objekt, welches über die identische
Schnittstelle wie die externe Abhàngigkeit verfügt und spritze dieses aus
meiner Testklasse von aussen ein.

Bei der Benennung solcher "Ersetzungsobjekte" bin ich mir nicht sicher, ob
ich den Begriff "Mock" oder "Stub" verwenden soll.
Worin sollen sich ein "Stub" von einem "Mock" unterscheiden?

Grüße
Christian
 

Lesen sie die antworten

#1 FrankDzaebel
03/12/2009 - 13:08 | Warnen spam
Hallo Christian,

Worin sollen sich ein "Stub" von einem "Mock" unterscheiden?



*Vorab*
Die zu testende Komponente nennt man in der Fachsprache auch System
Under Test (SUT). Ein SUT steht normal nicht allein. Dazu erfolgt
gàngigerweise eine Interaktion des SUT mit seiner Umwelt über
Schnittstellen. Jetzt kommen Mock- oder Stub-Objekte ins Spiel. Beide
simulieren die Interaktion des SUT mit den realen externen
Komponenten.

*Stubs* (aus dem engl.: Stummel, Stumpf) werden oft mit Proxy-Begriff
gleichgesetzt. Also im Deutschen etwa Stellvertreter, also Code, der
stellvertretend für den realen Code steht. Stub-Code ist zum Beispiel
noch nicht entwickelt, zu kompliziert für den Test oder auf einem
Remote-Rechner oder Remote-Memory. Ein Stub liefert keine Echtdaten,
sondern nur vorkonfigurierte, zum Kontext passende Daten.

*Mock* Objekte (aus dem engl. Fàlschung) sind quasi gefàlschte
Objekte. Mock-Objekte implementieren die Schnittstelle, über die das
zu testende Objekt auf seine Umgebung zugreift. Im Gegensatz zu Stub-
Objekten, die "nur" stellvertretend für realen Code stehen oder nur
vorbereitete Daten auf Anfrage liefern, verifiziert ein Mock auch das
Verhalten des SUT. Insbesondere stellt es sicher, dass die erwarteten
Methodenaufrufe vollstàndig, mit den korrekten Parametern und in der
erwarteten Reihenfolge durchgeführt werden. Genau wie ein Stub-Objekt
liefert ein Mock-Objekt keine Echtdaten, sondern nur zum Testfall
passende, vorher festgelegte Werte.

Oft ist die Anwendung von "Mocking-Framework's" sinnvoll, um die
wiederkehrenden Aufgaben bei Unit-Tests zu vereinfachen:

[HowTo: UnitTests und Einführung in Mocking mit Rhino.Mocks | Code-
Inside Blog]
http://code-inside.de/blog/2008/08/...hinomocks/

[moq - Project Hosting on Google Code]
http://code.google.com/p/moq/

[Unit testing .NET-Unit Test C# or VB.NET -Typemock -]
http://learn.typemock.com/
(etc. ...)
________

[Mocks Aren't Stubs]
http://martinfowler.com/articles/mo...Stubs.html

[inside-scrum: Stub vs. Mock]
http://inside-scrum.blogspot.com/20...-mock.html

[Mock-Objekt – Wikipedia]
http://de.wikipedia.org/wiki/Mock-Objekt

[Stub (Programmierung) – Wikipedia]
http://de.wikipedia.org/wiki/Stub_(Programmierung)


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen