Hier sind meine Regeln für die ideale Testausfallverhalten:
- Wenn Sie Abhängigkeiten verwenden die Ausnahmen auslösen könnte, dann sollten Sie Unit-Tests enthalten, die Ihre Mocks von ihnen machen Ausnahmen werfen.
- Wenn unter bestimmten Bedingungen Ihr Code Ausnahme auslösen sollte, dann sollten Sie Komponententests einschließen, die solche Bedingungen einrichtet.
Die erste lassen Sie wissen, was Ihr Code wie unter externen Fehlern verhält, und führt oft zu erwägen, ob was zu tun ist. In allen Situationen ist es gut zu sehen, was tatsächlich passiert. Die zweite stellt nur sicher, dass Sie halten, was Sie versprechen, soweit die Fehler Ihren Code erkennen und als außergewöhnlich betrachten. Es ist nicht anders als andere Funktionen in Ihrem Code zu testen.
Bevor Sie die Unit-Test-Suite vollständig betrachten, sollten Sie einen Blick auf Code-Coverage des getesteten Codes haben. Für nicht-trivialen Code gibt es fast immer eine Möglichkeit, meinen Code-Zweig, den meine Unit-Tests nicht abdecken, oder schlimmer noch, ein Verhalten, das ich nicht beabsichtigt habe. Überraschenderweise ist die Lösung, diesen Code zu entfernen, anstatt weitere Tests hinzuzufügen. Nur Craft wurde zurückgelassen, als es früher flügelte.
Ich sage nicht unbedingt, dass man eine 100% ige Abdeckung erreichen sollte, aber man sollte Code-Coverage-getriebene Unit-Tests durchführen, weil es eine visuelle Möglichkeit ist, das existierende Code-Verhalten zu verstehen und aufzudecken. Wenn Sie es betrachten, können Sie neue Ideen für die Refaktorierung von Code erhalten, um Single Responsibility Principle und Separation of Concerns zu erreichen.
Es macht immer Spaß, ein Produktionsproblem zu debuggen, bei dem der Absturz im Catch-Block ist. – Mark
Wenn es nur Logging und erneutes Auswerfen ist, würde ich nicht stören. Wahrscheinlich. Solange ich das Loggen woanders testete. Wenn es etwas Wichtiges tut, würde ich es tun. – serialhobbyist
Ja - obwohl das Zurückrollen einer Transaktion (nicht immer) ein ziemlich schwergewichtiger Prozess sein kann, von dem ich glaube, dass er getestet werden sollte. In diesem Fall würde ich es wahrscheinlich testen. –