Angenommen, ich habe eine Methode wie die folgende:
public void OrderNewWidget(Widget widget)
{
if ((widget.PartNumber > 0) && (widget.PartAvailable))
{
WigdetOrderingService.OrderNewWidgetAsync(widget.PartNumber);
}
}
Ich habe mehrere solcher Methoden in meinem Code (die vordere Hälfte zu einem asynchronen Web-Service-Aufruf).
Ich überlege, ob es sinnvoll ist, sie mit Unit-Tests abzudecken. Ja, hier gibt es Logik, aber es ist nur Wächterlogik. (Das heißt, ich stelle sicher, dass ich das benötigte Material habe, bevor ich den Webdienstaufruf zulasse.)
Ein Teil von mir sagt, "sicher, dass Sie sie Unit-Test können, aber es ist die Zeit nicht wert" (ich bin auf einem Projekt, das bereits hinter dem Zeitplan liegt).
Aber die andere Seite von mir sagt, wenn Sie sie nicht in einer Einheit testen und jemand die Wachen wechselt, könnte es Probleme geben.
Aber der erste Teil von mir sagt zurück, wenn jemand die Wachen wechselt, dann macht man einfach mehr Arbeit für ihn (weil er jetzt die Wachen und die Unit-Tests für die Wachen ändern muss).
Wenn mein Dienst beispielsweise die Verantwortung für die Überprüfung der Widget-Verfügbarkeit übernimmt, möchte ich diesen Wächter möglicherweise nicht mehr. Wenn es im Unit Test ist, muss ich jetzt zwei Plätze wechseln.
Ich sehe Vor- und Nachteile in beide Richtungen. Also dachte ich, ich würde fragen, was andere getan haben.
quelle
but it is not worth the time" (I am on a project that is already behind schedule).
Wir sind Softwareentwickler. Das einzige Mal, wenn wir im Zeitplan sind, sind wir tot :)Antworten:
Es sind drei sehr kurze Tests. Sie haben so viel Zeit damit verbracht, sich die Frage zu stellen.
Hören Sie auf diese Seite.
Wenn Ihr Betreuer eine TDD-Mutter ist, machen Sie es ihnen schwerer. Jede Änderung, die ich ohne eine entsprechende Änderung oder Hinzufügung von Tests vornehme, führt dazu, dass ich nachdenken muss. In der Tat würde ich wahrscheinlich die Tests hinzufügen, bevor ich fortfahre und die Änderung vornehme.
Der erste Teil von dir ist einfach falsch. Klopfen Sie den zweiten Teil auf den Rücken und denken Sie nicht mehr darüber nach.
quelle
Es würde das Testen von Einheiten vereinfachen, wenn die Schutzlogik und die tatsächliche Reihenfolge getrennte Methoden wären.
In der
Widget
Klasseoder eine gleichwertige Methode woanders
Die Bestellmethode
Jetzt wurde das Testen
IsWidgetReadyForOrdering
einfach. Denken Sie nicht mehr lange darüber nach. Probier es aus!quelle
OrderNewWidget
gehört wahrscheinlich zu einer anderen Klasse alsWidget
, da sie einWidget
Argument hat. Da die Methode keinen Rückgabewert hat, ist das Testen nicht offensichtlich. Sie müssten einenWigdetOrderingService
-mock einfügen, der denOrderNewWidgetAsync
Anruf verfolgt.Wenn Sie in Ihrem Zeitplan keine Zeit für Unit-Tests haben, aber Zeit für eine solide QA-Nutzung haben, fragen Sie, ob Sie einen Teil dieser QA-Zeit zum Schreiben von Unit-Tests verwenden oder einen Teil der QA-Zeit verbringen können Ich mache Unit-Tests oder beschäftige mich nur mit Code, der nicht Unit-getestet wurde. das System während der Laufzeit korrekt warten.
Das heißt, zu Ihrer allgemeinen Frage der Prüfung von Wachaussagen; Ja! Unbedingt Guard-Statements testen! Das sind wichtige Teile des Verhaltens dieser Methode. Sie möchten nicht herausfinden, dass jemand etwas missverstanden hat, das einen Bugfix ausführt, und Ihre Wachen entfernt oder das
&&
in ein "||
Würden Sie" geändert hat. Unit-Tests stellen sicher, dass a) Sie die Logik Ihrer Wachen tatsächlich richtig verstanden haben und b) niemand diese Logik später bricht, ohne eine Beschwerde zu erhalten, wenn er die Unit-Tests durchführt, in denen er erklärt, dass dies aus irgendeinem Grund so sein sollte.quelle
Es gibt einige ausgezeichnete Antworten, und die Punkte, die sie machen, sind sehr wichtig. Aber eines, das vermisst zu werden scheint, ist, dass Sie eine umfassende Reihe von Unit-Tests haben, die sich wie eine extrem detaillierte Spezifikation des Codes lesen. Wenn Sie die Testvalidierung weglassen, nur weil der Code so einfach ist, ist schwer einzusehen, wie es schief gehen könnte, fehlt ein Teil Ihrer Spezifikation. Wenn ich in ein Team käme, in dem diese Tests verpasst worden wären, würde ich davon ausgehen, dass Ihr Dienst seine Argumente nicht bestätigte.
quelle
Code ist Code. Sie sollten versuchen, beim Testen eine 100% ige Abdeckung zu erzielen. Wenn es nicht wichtig wäre, wäre es nicht da.
quelle