In den letzten Wochen habe ich darüber nachgedacht, wie ich eine Lücke in unserer Testmethode schließen kann. Vereinfacht ausgedrückt sind Unit-Tests zu klein und herkömmliche Integrationstests zu groß.
Ein häufiges Szenario kommt, wo A
und B
beide verwenden Komponenten C
. Allerdings A
und B
haben leicht unterschiedliche Anforderungen an und machen leicht unterschiedliche Annahmen über C
. Wenn ich der Entwickler bin, A
wie und wo teste ich meine Annahmen C
?
Offensichtlich sind Unit-Tests A
mit verspotteten Annahmen C
für A
isolierte Tests in Ordnung , aber sie testen die Annahmen selbst nicht.
Eine andere Möglichkeit besteht darin, Unit-Tests für hinzuzufügen C
. Dies ist jedoch nicht ideal, da es während der A
Entwicklung übermäßig umständlich sein wird, die Tests C
mit sich entwickelnden Annahmen von zu ändern A
. In der Tat hat der A
Entwickler möglicherweise nicht einmal ausreichenden Zugriff auf die Komponententests von C
(z. B. einer externen Bibliothek).
Um dies mit einem konkreteren Beispiel zu versehen: Angenommen, dies ist eine Knotenanwendung. A
und B
hängen davon ab C
, eine Datei zu lesen (unter anderem) und den Dateiinhalt in einem Objekt zu speichern, an das übergeben wird C
. Zunächst sind alle Dateien, die C
behandelt werden, klein und können ohne nennenswerte Blockierung synchron gelesen werden. Der Entwickler von B
erkennt jedoch, dass seine Dateien sehr groß werden und C
zu einem asynchronen Lesevorgang wechseln müssen . Dies führt zu einem sporadischen Synchronisationsfehler A
, bei dem immer noch davon ausgegangen C
wird, dass Dateien synchron gelesen werden.
Dies ist die Art von Fehler, die bekanntermaßen bei vollständigen Integrationstests nur schwer aufzuspüren ist und möglicherweise überhaupt nicht in Integrationstests abgefangen wird. Es wird auch nicht von A
s Unit-Tests erfasst, da die A
s-Annahmen verspottet werden. Es könnte jedoch leicht von einem "Mini" -Integrationstest erfasst werden, der nur A
und trainiert C
.
Ich habe nur wenige Hinweise auf diese Art von Tests gefunden. Integration in den Small , Component Integration Testing , Unit Integration Testing. Es bezieht sich auch eher auf die BDD-Testrichtung als auf formale TDD-Einheitentests.
Wie fülle ich diese Testlücke? Speziell - wo stelle ich solche Tests? Wie verspotte ich die Eingaben von A
und C
für "Mini" -Integrationstests? Und wie viel Aufwand sollte betrieben werden, um Testprobleme zwischen diesen Tests und Unit-Tests zu trennen? Oder gibt es einen besseren Weg, um die Testlücke zu schließen?