Dies ist eine wichtige Unterscheidung, aber leider werden Sie nie eine Einigung finden. Das Problem ist, dass die meisten Entwickler diese aus ihrer eigenen Sicht definieren. Es ist der Debatte über Pluto sehr ähnlich. (Wenn es näher an der Sonne wäre, wäre es ein Planet?)
Unit-Tests sind einfach zu definieren. Es testet den CUT ( Code Under Test ) und sonst nichts. (Nun, so wenig wie möglich.) Das bedeutet Verspottungen, Fälschungen und Spielpaarungen.
Am anderen Ende des Spektrums gibt es das, was viele Leute Systemintegrationstests nennen . Das testet so viel wie möglich, sucht aber immer noch nach Fehlern in Ihrem eigenen CUT.
Aber was ist mit der Weite dazwischen?
- Was ist zum Beispiel, wenn Sie nur ein bisschen mehr als den CUT testen? Was ist, wenn Sie eine Fibonacci-Funktion einschließen, anstatt ein Gerät zu verwenden, das Sie injiziert haben? Ich würde das Funktionstest nennen , aber die Welt stimmt mir nicht zu.
- Was ist, wenn Sie
time()
oder einschließen rand()
? Oder was ist, wenn Sie anrufen http://google.com
? Ich würde das Systemtest nennen , aber ich bin wieder allein.
Warum ist das wichtig? Weil Systemtests unzuverlässig sind. Sie sind notwendig, scheitern aber manchmal aus Gründen, die außerhalb Ihrer Kontrolle liegen. Auf der anderen Seite sollten Funktionstests immer bestanden werden und nicht zufällig fehlschlagen. Wenn sie schnell sind, können sie auch von Anfang an verwendet werden, um die testgesteuerte Entwicklung zu verwenden, ohne zu viele Tests für Ihre interne Implementierung zu schreiben. Mit anderen Worten, ich denke, dass Unit-Tests mehr Probleme bereiten können, als sie wert sind, und ich habe gute Gesellschaft .
Ich habe 3 Achsen mit all ihren Nullen beim Unit-Test getestet :
- Funktionstests: Verwenden Sie echten Code immer tiefer in Ihrem Call-Stack.
- Integrationstests: Immer höher in Ihrem Call-Stack; Mit anderen Worten: Testen Sie Ihren CUT, indem Sie den Code ausführen, der ihn verwenden würde.
- Systemtests: Immer mehr unwiederholbare Vorgänge (O / S-Scheduler, Uhr, Netzwerk usw. )
Ein Test kann leicht alle 3 in unterschiedlichem Maße sein.