Ich mag die Antwort von @ RevBingo wirklich, weil er vorschlägt, dass der Kampf um 100% dazu führen kann, dass Sie nicht verwendeten Code bereinigen oder löschen. Was ich in den anderen Antworten nicht gesehen habe, ist ein Gefühl dafür, wann Sie eine hohe Abdeckung benötigen und wann nicht. Ich habe versucht, damit anzufangen. Ich denke, das Hinzufügen von Details zu einem Diagramm wie diesem wäre nützlicher, als eine Testabdeckungsnummer zu finden, die für den gesamten Code richtig ist.
100%
Für eine öffentliche API wie die java.util-Sammlungen, die nicht an eine Datenbank gekoppelt ist und kein HTML zurückgibt, halte ich 100% ige Abdeckung für ein vorrangiges Startziel, selbst wenn Sie sich aus Zeitgründen mit 90-95% zufrieden geben Einschränkungen. Das Erhöhen der Testabdeckung nach Abschluss des Features führt zu einer genaueren Überprüfung als andere Arten der Codeüberprüfung. Wenn Ihre API überhaupt populär ist, werden die Leute sie in einer Weise verwenden, in eine Unterklasse unterteilen, deserialisieren usw., die Sie nicht erwarten können. Sie möchten nicht, dass ihre erste Erfahrung darin besteht, einen Fehler zu finden oder ein Versehen beim Entwerfen!
90%
Für Geschäftsinfrastrukturcode, der Datenstrukturen aufnimmt und Datenstrukturen zurückgibt, ist 100% wahrscheinlich immer noch ein gutes Startziel, aber wenn dieser Code nicht öffentlich genug ist, um viel Missbrauch auszulösen, sind 85% vielleicht noch akzeptabel?
75%
Für Code, der Strings aufnimmt und zurückgibt, halte ich Unit-Tests für viel brüchiger, kann aber in vielen Situationen dennoch nützlich sein.
50% oder weniger
Ich hasse es, Tests für Funktionen zu schreiben, die HTML zurückgeben, weil es so spröde ist. Was ist, wenn jemand das CSS, das JavaScript oder das gesamte von Ihnen zurückgegebene HTML und Englisch ändert, was für den menschlichen Endbenutzer keinen Sinn ergibt? Wenn Sie eine Funktion finden, die viel Geschäftslogik verwendet, um ein wenig HTML zu erzeugen, ist dies möglicherweise einen Test wert. Aber die umgekehrte Situation ist möglicherweise überhaupt nicht prüfenswert.
In der Nähe von 0%
Für einige Codes lautet die Definition von "richtig" "für den Endbenutzer sinnvoll". Es gibt nicht-traditionelle Tests, die Sie mit diesem Code durchführen können, z. B. die automatische Grammatikprüfung oder die HTML-Validierung der Ausgabe. Ich habe sogar grep-Anweisungen für kleine Inkonsistenzen eingerichtet, denen wir bei der Arbeit häufig zum Opfer fallen, z. B. "Anmelden", wenn der Rest des Systems dies als "Anmelden" bezeichnet. Dieser Mann ist nicht unbedingt ein Komponententest, sondern eine hilfreiche Methode, um Probleme zu erkennen, ohne bestimmte Ergebnisse zu erwarten.
Letztendlich kann jedoch nur ein Mensch beurteilen, was für den Menschen sinnvoll ist. Unit Testing kann Ihnen da nicht weiterhelfen. Manchmal brauchen mehrere Menschen, um das genau zu beurteilen.
Absolut 0%
Dies ist eine traurige Kategorie, und ich fühle mich weniger als jemand, der sie schreibt. Aber in jedem ausreichend großen Projekt gibt es Hasenlöcher, die Wochen Zeit kosten können, ohne geschäftlichen Nutzen zu bringen.
Ich habe ein Buch gekauft, weil es angeblich zeigt, wie man Daten zum Testen von Hibernate automatisch verspottet. Es wurden jedoch nur Hibernate-HQL- und SQL-Abfragen getestet. Wenn Sie viel mit HQL und SQL arbeiten müssen, können Sie den Vorteil von Hibernate nicht wirklich nutzen. Es gibt eine Form der In-Memory-Datenbank für den Ruhezustand, aber ich habe nicht die Zeit investiert, um herauszufinden, wie man sie effektiv in Tests verwendet. Wenn ich das laufen lassen würde, würde ich eine hohe Testabdeckung (50% -100%) für jede Geschäftslogik haben wollen, die Sachen durch Navigieren in einem Objektdiagramm berechnet, wodurch Hibernate einige Abfragen ausführt. Meine Fähigkeit, diesen Code zu testen, liegt derzeit nahe bei 0%, und das ist ein Problem. Deshalb verbessere ich die Testabdeckung in anderen Bereichen des Projekts und versuche, reine Funktionen denen vorzuziehen, die auf die Datenbank zugreifen, vor allem, weil es einfacher ist, Tests für diese Funktionen zu schreiben. Immer noch,