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 Aund Bbeide verwenden Komponenten C. Allerdings Aund Bhaben leicht unterschiedliche Anforderungen an und machen leicht unterschiedliche Annahmen über C. Wenn ich der Entwickler bin, Awie und wo teste ich meine Annahmen C?
Offensichtlich sind Unit-Tests Amit verspotteten Annahmen Cfür Aisolierte 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 AEntwicklung übermäßig umständlich sein wird, die Tests Cmit sich entwickelnden Annahmen von zu ändern A. In der Tat hat der AEntwickler 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. Aund Bhä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 Cbehandelt werden, klein und können ohne nennenswerte Blockierung synchron gelesen werden. Der Entwickler von Berkennt jedoch, dass seine Dateien sehr groß werden und Czu einem asynchronen Lesevorgang wechseln müssen . Dies führt zu einem sporadischen Synchronisationsfehler A, bei dem immer noch davon ausgegangen Cwird, 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 As Unit-Tests erfasst, da die As-Annahmen verspottet werden. Es könnte jedoch leicht von einem "Mini" -Integrationstest erfasst werden, der nur Aund 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 Aund Cfü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?