BDD wurde als "TDD done right" angepriesen.
TDD wird jedoch häufig anstelle von End-to-End-Integrationstests mit unit -Tests verwendet.
Welche Art von Test ist am besten für BDD geeignet?
Welche Art von Test (Integrationstests, Komponententests) ist am besten für BDD geeignet?
Ich würde beide in zwei verschachtelten Schleifen verwenden, wie in Verhaltensorientierte Entwicklung mit SpecFlow und WatiN
%Vor%Der Grund dafür, dass Sie Akzeptanztests / Integrationstests häufig im BDD-Zyklus verwenden, liegt darin, dass viele ihrer Praktiker eine starke Betonung auf Spott und Außenentwicklung legen. Daher müssen sie in der Regel sowohl End-to-End-Integrations- / Akzeptanztests als auch Unit-Tests durchführen, um das Gesamtverhalten des Systems sicherzustellen.
Wenn gefälschte Objekte in einem Komponententest anstelle von realen Objekten als Kollaborateure verwendet werden, ist es ziemlich einfach zu verifizieren, dass die isolierte Einheit sich in der richtigen Weise verhält (das heißt, dass sie ihren Zustand richtig ändert und die richtige Nachrichten). Es kann jedoch nichts mehr verifizieren, als dass das einzelne Objekt sich wie erwartet verhält. Daher ist ein Ende-zu-Ende-Abnahmetest erforderlich, um sicherzustellen, dass alle Objekte im System bei gemeinsamer Verwendung den versprochenen Wert für den Endbenutzer bereitstellen.
Im Grunde genommen spielen Einheitstests und Akzeptanztests daher die folgenden Rollen:
Komponententests - Objekte verhalten sich in der richtigen Weise
Akzeptanz- / Integrationstests - Alle Objekte zusammen ergeben den versprochenen Wert des Systems.
Obwohl ich selbst ein großer Befürworter dieses Entwicklungsstils bin, ist es etwas unabhängig von den allgemeinen BDD-Ideen. Meiner Meinung nach sind Akzeptanz- / Integrationstests nur notwendig, wenn Sie Ihr zu testendes System in Ihrem Gerät mit Mocks und Stubs isolieren.
Ich werde die Antwort geben, die mir am wahrscheinlichsten erscheint, aber ich könnte hier nicht mithalten.
TDD wurde ursprünglich mit Unit-Tests implementiert, die Anforderungen an einzelne Komponenten der Software verdeutlichen, indem sie aufgerufen und bestimmte Ergebnisse erwartet werden.
BDD wendet einfach das gleiche Konzept auf das -System als ganzes an. Für BDD schreiben Sie also Integrationstests, die das System von außen aufrufen, indem Sie Mausklicks usw. simulieren, oder welche Schnittstelle der Endbenutzer auch für den Zugriff auf das System verwendet.
BDD scheint tatsächlich eine Art Black-Box / UAT-Test zu sein, da es sich um das Verhalten des Systems als Ganzes handelt und nicht um die Mittel, mit denen das Verhalten implementiert wird.
Es scheint also ratsam, Komponententests und Integrationstests zu schreiben, aber zumindest Integrationstests, so dass wir, wenn wir keine Zeit haben, jede Komponente zu verifizieren, das System als Ganzes verifizieren können.
Die Grundidee besteht darin, die Tests vor dem Code zu schreiben. Verwenden Sie für jedes Feature den geeigneten Test, um das Feature zu untersuchen. Wenn die Funktion, die Sie hinzufügen, "Klicken auf den Link zum Fehlerbericht sollte eine E-Mail senden" ist, dann scheint ein Integrationstest angemessen (vermutlich mit einigen Komponententests für Komponenten dieser Funktion). Wenn das Merkmal, an dem Sie arbeiten, "Die Berechnung der durchschnittlichen Nutzung sollte den höchsten und den niedrigsten Wert weglassen", ist ein Komponententest wahrscheinlich geeigneter. Wichtig ist, genau zu wissen, wann das, was Sie bauen, getan wird und später, um sicher zu sein, dass Änderungen es nicht gebrochen haben. Der Rest ist nur Buchhaltung.
Tags und Links unit-testing tdd integration-testing bdd