Frage

Ich schreibe Unit -Tests für Klassen mit Eigenschaften, die haben Setzer, aber keine Getter.

Ich möchte in der Lage sein Testen Sie diese Setter Um sicherzustellen, dass sie die Daten korrekt einstellen.

Ich finde meine Optionen sind:

  • Schreiben Sie Getter Für diese Funktionen, damit ich testen kann, ob sie korrekt eingestellt werden
  • Schreiben Sie eine Methode wie z. testAllSetters() die sie alle auf einmal testen

Aber beide Lösungen sind unerwünscht Da es der Klasse unnötige Funktionen verleiht, um sie zu testen.

  • Ich könnte auch die Ausgabe der Klasse testen, um festzustellen, dass sie im Allgemeinen korrekt ist, aber in vielen Fällen testet dies die einzelnen Setter nicht so, wie ich es möchte

Was ist der beste Weg, um Testsetzer in Klassen zu entlassen, in denen keine Getter gepaart wurden?

War es hilfreich?

Lösung

Das Problem hierfür ist, dass Sie Ihre API nicht für Ihre Unit -Tests ändern möchten. Betrachten Sie Ihre Unit -Tests als einen anderen Benutzer/Verbraucher Ihrer API. Genau wie Entwickler, die diese Bibliothek verwenden, haben Unit -Tests ihre eigenen Anforderungen. Wenn Sie Ihre Unit -Tests als Verbraucher Ihrer API sehen, wird es einen Benutzer geben, der diese Getter verwendet, und dies rechtfertigt sie.

Wenn dies nicht möglich ist, um Ihre API zu ändern (zum Beispiel, wenn Sie ein wiederverwendbares Framework entwickeln), machen Sie die API der Unit -Tests intern und verwenden Sie die InternalsVisibleToAttribute Damit Ihre Testbibliothek auf interne Methoden Ihres Codes zugreifen kann.

Wenn Sie Unit -Tests beiseite lassen, möchten Sie möglicherweise noch in Betracht ziehen, Geters für diese Immobilien zu haben, da es für Entwickler sehr unintuitiv ist, Immobilien ohne Getter zu haben. Das Richtlinien für Frameworkdesign Ich habe sogar eine Regel dagegen:

UNTERLASSEN SIE Stellen Sie den Setter mit einer umfassenderen Zugänglichkeit als dem Getter ein Setter-Eigenschaften oder -Hereigenschaften bereit.

Vielleicht möchten Sie dies auch berücksichtigen.

Viel Glück.

Andere Tipps

Du könntest benutzen PrivatObject Um die privaten Mitglieder zu überprüfen, wurden nach dem Aufrufen des Setters korrekt aktualisiert

Haben die Setter eine Logik?

Ja: Entweder öffnen Sie den Getter. Java: Schutz und habe den Unit -Test im selben Paket. C#: InternalSVisibletoatTribute.

Nein: Stellen Sie die Setter nicht direkt ein. Kein Sinn. Testen Sie die Methoden, die den Datensatz von den Setzen verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top