Fragen Sie sich wirklich: "Hätten Unit-Tests hier geholfen?", Oder fragen Sie sich: "Könnten irgendwelche Tests hier möglicherweise geholfen haben?".
Die naheliegendste Form des Testens, die geholfen hätte, ist die Voraussetzung im Code selbst, dass eine Verzweigungskennung nur aus Ziffern besteht (vorausgesetzt, dies ist die Annahme, auf die sich der Codierer beim Schreiben des Codes stützt).
Dies könnte dann in einer Art Integrationstest fehlgeschlagen sein, und sobald die neuen alphanumerischen Verzweigungs-IDs eingeführt werden, explodiert die Behauptung. Aber das ist kein Komponententest.
Alternativ könnte es einen Integrationstest des Verfahrens geben, der den SEC-Bericht generiert. Dieser Test stellt sicher, dass jede reale Zweigstellenkennung ihre Transaktionen meldet (und erfordert daher eine reale Eingabe, eine Liste aller verwendeten Zweigstellenkennungen). Das ist also auch kein Unit-Test.
Ich kann keine Definition oder Dokumentation der beteiligten Schnittstellen sehen, aber es kann sein, dass Unit-Tests den Fehler möglicherweise nicht erkannt haben, weil das Gerät nicht fehlerhaft war . Wenn das Gerät aus diesem Zweig Bezeichner ist nur zulässig , von Ziffern zu übernehmen, und die Entwickler machten nie eine Entscheidung , was der Code für den Fall tun soll es nicht, dann sie sollten nichtSchreiben Sie einen Komponententest, um ein bestimmtes Verhalten bei nicht-stelligen Kennungen zu erzwingen, da der Test eine hypothetisch gültige Implementierung der Einheit ablehnen würde, die alphanumerische Verzweigungskennungen korrekt behandelt, und Sie normalerweise keinen Komponententest schreiben möchten, der die Gültigkeit verhindert zukünftige Implementierungen und Erweiterungen. Oder vielleicht hat ein Dokument, das vor 40 Jahren geschrieben wurde, implizit (über einen lexikografischen Bereich in EBCDIC-Rohdaten anstelle einer menschlicheren Kollatierungsregel) festgelegt, dass 10B eine Testkennung ist, da sie tatsächlich zwischen 089 und 100 liegt. Aber dann Vor 15 Jahren hat sich jemand entschieden, es als echte Kennung zu verwenden, damit der "Fehler" nicht in der Einheit liegt, die die ursprüngliche Definition korrekt implementiert: es liegt in dem Prozess, der nicht bemerkt hat, dass 10B als Testidentifikator definiert ist und daher keiner Verzweigung zugewiesen werden sollte. Dasselbe würde in ASCII passieren, wenn Sie 089 - 100 als Testbereich definieren und dann einen Bezeichner 10 $ oder 1.0 eingeben. Es kommt einfach vor, dass in EBCDIC die Ziffern hinter den Buchstaben stehen.
Ein Unit-Test (oder wohl ein Funktionstest), der vorstellbar istVielleicht haben Sie den Tag gerettet, ist ein Test des Geräts, das neue Zweig-IDs generiert oder validiert. Dieser Test würde behaupten, dass die Bezeichner nur Ziffern enthalten dürfen und geschrieben werden, damit Benutzer der Zweigbezeichner dasselbe annehmen können. Oder vielleicht gibt es irgendwo eine Einheit, die echte Verzweigungskennungen importiert, aber die Testkennungen nie sieht, und die von der Einheit getestet werden kann, um sicherzustellen, dass alle Testkennungen abgelehnt werden (wenn die Kennungen nur drei Zeichen umfassen, können wir sie alle auflisten und das Verhalten von vergleichen den Validator des Testfilters, um sicherzustellen, dass sie übereinstimmen, was die üblichen Einwände gegen Stichproben betrifft). Wenn dann jemand die Regeln geändert hat, wäre der Komponententest fehlgeschlagen, da er dem neu erforderlichen Verhalten widerspricht.
Da der Test aus gutem Grund vorhanden war, bietet sich für jemanden die Möglichkeit, ihn aufgrund geänderter Geschäftsanforderungen zu entfernen. "Suchen Sie jeden Punkt im Code, der sich auf das gewünschte Verhalten stützt Veränderung". Dies ist natürlich schwierig und daher unzuverlässig, so dass die Rettung des Tages keineswegs garantiert ist. Wenn Sie jedoch Ihre Annahmen in Tests der Einheiten erfassen, für die Sie Eigenschaften annehmen, haben Sie sich eine Chance gegeben, und der Aufwand wird nicht vollständig verschwendet.
Ich stimme natürlich zu, dass es nichts zu testen gibt, wenn die Einheit nicht an erster Stelle mit einem "witzig geformten" Eingang definiert worden wäre. Fummelige Namespace-Abteilungen können schwierig zu testen sein, da die Schwierigkeit nicht darin besteht, Ihre lustige Definition zu implementieren, sondern sicherzustellen, dass jeder Ihre lustige Definition versteht und respektiert. Das ist keine lokale Eigenschaft einer Codeeinheit. Darüber hinaus entspricht das Ändern eines Datentyps von "einer Zeichenfolge" in "eine Zeichenfolge aus alphanumerischen Zeichen" dem Verarbeiten von Unicode durch ein ASCII-basiertes Programm: Es ist nicht einfach, wenn Ihr Code stark an die ursprüngliche Definition gekoppelt ist und wann Der Datentyp ist grundlegend für das, was das Programm tut, und ist dann oft stark gekoppelt.
Es ist ein bisschen beunruhigend zu glauben, dass es größtenteils vergebliche Anstrengungen sind
Wenn Ihre Komponententests manchmal fehlschlagen (z. B. beim Refactoring) und dabei nützliche Informationen liefern (z. B. ist Ihre Änderung falsch), wurde der Aufwand nicht verschwendet. Was sie nicht tun, ist zu testen, ob Ihr System funktioniert. Wenn Sie also Unit-Tests schreiben, anstatt Funktions- und Integrationstests durchzuführen, nutzen Sie Ihre Zeit möglicherweise nicht optimal.