Die extrem kurze Version: Kleinere Tests, da sie kleinere Teile des Systems ausführen, schränken natürlich das ein, was die Programmierer schreiben können, und dies schafft die Möglichkeit für schärferes Feedback (leichter zu bemerken / schwerer zu ignorieren). Lassen Sie mich hinzufügen, dass dies nicht unbedingt zu einem besseren Design führt, sondern vielmehr die Möglichkeit bietet, Designrisiken früher zu bemerken.
Zur Verdeutlichung: Wenn ich "Mikrotest" sage, meine ich "einen kleinen Test" und nichts weiter. Ich benutze diesen Begriff, weil ich nicht "Unit Test" meine: Ich möchte mich nicht in Debatten darüber verwickeln lassen, was eine "Unit" ausmacht. Es ist mir egal (zumindest nicht hier / jetzt). Zwei Leute werden sich wahrscheinlich leichter auf "klein" einigen als auf "Einheit", daher habe ich mich nach und nach entschieden, "Mikrotest" als neuen Standardbegriff für diese Idee zu verwenden.
Größere Tests, dh Tests, die größere Teile des Systems in ihrem "Action" -Teil ausführen, kritisieren das Design in der Regel nicht so klar und vollständig wie kleinere Tests. Stellen Sie sich die Menge aller Codebasen vor, die eine bestimmte Gruppe von Tests bestehen könnten, was bedeutet, dass ich den Code reorganisieren könnte und er diese Tests trotzdem bestehen würde. Für größere Tests ist dieses Set größer. Für kleinere Tests ist dieses Set kleiner. Anders gesagt, beschränken kleinere Tests das Design mehr, so dass weniger Designs sie bestehen können. Auf diese Weise können Mikrotests das Design stärker kritisieren.
Ich sage "härter", um das Bild eines Freundes zu zaubern, der dir direkt sagt, was du nicht hören willst, aber hören musst, und der dich anschreit, um Dringlichkeit auf eine Weise zu vermitteln, die andere Menschen möglicherweise nicht wohlfühlen tun. Integrierte Tests hingegen bleiben leise und deuten nur dann auf Probleme hin, wenn Sie keine Zeit und Energie mehr haben, diese zu beheben. Integrierte Tests machen es zu einfach, Designprobleme unter den Teppich zu kehren.
Bei umfangreicheren Tests (wie integrierten Tests) geraten Programmierer in der Regel durch Schlamperei in Schwierigkeiten: Sie haben genügend Freiheit, verworrenen Code zu schreiben, der die Tests irgendwie besteht, aber ihr Verständnis für diesen Code lässt schnell nach, sobald sie mit der nächsten Aufgabe fortfahren und andere haben unangemessene Schwierigkeiten, das verwirrte Design zu lesen. Hier liegt das Risiko, sich auf integrierte Tests zu verlassen. Bei kleineren Tests (wie Mikrotests) geraten Programmierer meistens in Schwierigkeiten, wenn sie zu viele Angaben machen: Sie beschränken die Tests, indem sie irrelevante Details hinzufügen, in der Regel durch Kopieren / Einfügen aus dem vorherigen Test, und malen sich dabei relativ schnell selbst in eine Ecke. Gute Nachrichten: Ich finde es viel einfacher und sicherer, überflüssige Details mehrere Stunden oder Tage nach dem Schreiben aus Tests zu entfernen, als Monate oder Jahre nach dem Schreiben verwickelten Produktionscode auseinander zu ziehen. Mit zunehmendem Fehler verursacht eine zu hohe Spezifikation immer schnelleren Schaden, und der Programmierer sieht früher, dass die Probleme behoben werden müssen. Ich halte das für eine Stärke: Ich stelle Probleme früher fest und behebe sie, bevor diese unsere Fähigkeit zum Hinzufügen von Funktionen einschränken.