Unit-Tests sollten zu 95 % der Zeit nur die öffentlich zugängliche Oberfläche einer Klasse testen. Wenn man etwas im Verborgenen testet, testet man Implementierungsdetails, was von Natur aus anfällig ist, weil man die Implementierung leicht ändern können sollte und die Tests trotzdem funktionieren müssen. Das ist nicht nur anfällig, sondern man könnte auch in Versuchung geraten, Dinge zu testen, die in den geplanten Nutzungsszenarien gar nicht möglich sind, was Zeitverschwendung ist.
Wenn der Sinn der Accessors, die Sie hinzufügen wollen, nur darin besteht, zu testen, ob die Funktion den gewünschten Effekt hatte, könnte Ihr Klassendesign einen anderen Grundsatz verletzen, nämlich dass eine zustandsmaschinenähnliche Klasse immer deutlich machen sollte, in welchem Zustand sie sich befindet, wenn das Auswirkungen darauf hat, was passiert, wenn Menschen mit der Klasse interagieren. In diesem Fall wäre es richtig, diese Nur-Lese-Zugriffsfunktionen bereitzustellen. Wenn es keinen Einfluss auf das Verhalten der Klasse hat, verweise ich auf meinen vorherigen Abschnitt über Implementierungsdetails.
Und wie Sie richtig sagten, ist es auch aus eigenen Gründen unerwünscht, die öffentliche Oberfläche einer Klasse mit ungenutztem Material zu überladen.
Wenn ich hatte Wenn ich in Ihrem Fall zwischen Accessors und Friending wählen müsste, würde ich mich für Friending entscheiden, einfach weil Sie besitzen Ihren Test und können ihn im Handumdrehen ändern. Der Code des Clowns, der einen Weg findet, Ihre zusätzlichen Accessoren zu verwenden, gehört Ihnen möglicherweise nicht, und dann sitzen Sie fest.
0 Stimmen
Mögliches Duplikat von Wie teste ich eine Klasse, die private Methoden, Felder oder innere Klassen hat?