Gibt es einen Java-Unit-Test-Framework, die Auto-Tests Getter und Setter? [geschlossen]

StackOverflow https://stackoverflow.com/questions/108692

  •  01-07-2019
  •  | 
  •  

Frage

Es ist eine wohlbekannte Debatte in Java (und anderen Gemeinden, ich bin sicher), ob oder nicht trivial Getter / Setter-Methoden getestet werden sollen. Normalerweise ist dies in Bezug auf die Codeabdeckung. Lassen Sie sich darüber einig, dass es sich um eine offene Debatte, und nicht versuchen, es hier zu beantworten.

Es wurden mehrere Blog-Posts waren auf mit Java Reflexion Auto-Test solcher Verfahren.

Hat jeder Rahmen (z jUnit) bieten eine solche Funktion? z.B. Eine Anmerkung, die „dieser Test T sollte auto-Test alle Getter / Setter auf Klasse C, weil ich behaupten, dass sie Standard sind“, sagt.

Es scheint mir, dass es Wert hinzufügen würde, und wenn es konfigurierbar ist, die ‚Debatte‘ würde als Option des Benutzer überlassen werden.

War es hilfreich?

Lösung

Unitils tut dies w / der statischen Methode assertRefEquals.

Andere Tipps

Ich bin mir nicht bekannt, dass leicht verfügbare Bibliothek oder Klasse, die dies tut. Dies kann vor allem, weil ich, als ich auf der Seite der stark gegen solche Tests bin nicht kümmern. Also auch wenn Sie gefragt, es muss sein ein wenig Rechtfertigung für diese Ansicht:

Ich bezweifle, dass autotesting Getter und Setter Ihre Code-Qualität oder Ihre Berichterstattung profitieren: Entweder ist diese Methoden aus anderem Code verwendet werden (und dort getestet, zum Beispiel 100% abgedeckt) oder gar nicht verwendet (und können entfernt werden). Am Ende werden Sie Getter und Setter in verlassen, weil sie aus dem Test verwendet werden, aber nirgendwo sonst in der Anwendung.

Es sollte einfach sein, einen solchen Test zu schreiben, zum Beispiel mit Apache Commons BeanUtils, aber ich bezweifle, dass Sie es wirklich brauchen, wenn Sie sonst gute Tests haben.

Ich habe die OpenPojo Projekt zur Lösung dieses genau Problem.

Das Projekt erlaubt es zu prüfen:

  • Erzwingen Pojo Codierungsstandard (das heißt alle Felder privaten oder keine nativen Variablen, ... etc)
  • Erzwingen Pojo Verhalten (das heißt Setter funktioniert einfach Setzung keine Transformation, etc.)
  • Validate Pojo Identität (das heißt Verwendung Annotation basierend Gleichheit & hashcode Generation)

Tutorial

In den meisten Fällen Setter und Getter mehr tun, als nur Einstellung und Aufrechterhaltung eines internen Feld zu bekommen. Ein Objekt hat interne Regeln zu überprüfen, die es nur gültige Werte halten. Zum Beispiel

  • sind Nullwerte möglich?
  • sind leere Strings möglich?
  • oder negative Werte?
  • oder ein Nullwert?
  • oder Werte aus einer Liste sind gültig?
  • oder gibt es einen Maximalwert?
  • oder gibt es eine maximale Präzision auf BigDecimal Werte?

Das Gerät Test soll prüfen, ob das Verhalten korrekt, wenn es ungültige Werte. Dies kann nicht automatisiert werden.

Wenn Sie keine Logik auf dem Setter und Getter dann muss es überall in Ihrer Anwendung verwendet werden. Schreiben Sie einen Test, bei dem Ihr Objekt ist ein Parameter für einen komplexeren Test. Sie können es testen dann mit verschiedenen Werten aus der Liste.

Testen Sie Ihre Business-Logik und nicht die Getter und Setter. Das Ergebnis sollte auch eine Bedeckung der Getter und Setter. Die Verfahren sollten auch jedes Ergebnis in Ihrer Business-Logik, wenn Sie nur eine öffentliche Bibliothek. Wenn der Getter und Setter keine Codeabdeckung entfernt haben Sie es dann.

Ich habe so etwas getan. Eine einfache Java-Klasse, die ein Objekt und testet all Getter und Setter-Methoden erfolgt. http://sourceforge.net/projects/getterandsetter/

Ich denke, Sie sollten Getter und Setter-Methoden so weit wie möglich zu vermeiden, aber solange sie sind um und es dauert zwei Linien, sie zu testen, es ist eine gute Sache, es zu tun.

Ich werde OO-Design über Code Coverage, favorisieren und sehen, ob ich nicht die Felder der Klasse bewegen können, die sie braucht. So würde ich versuchen, zu sehen, ob diese Getter und Setter entfernt werden können, wie zuvor vorgeschlagen. Getter und Setter sind brechen Kapselung .

Ich denke, diese Bibliothek ist die Antwort auf Ihre Frage

testet alle Anfangswerte der Bohne, die setters, die getters, hashCode(), equals() and toString(). Alles was Sie tun müssen, ist eine Karte von Standard- und Nichtstandardeigenschaft / Wert zu definieren.

Es kann auch Objekte testen, die Bohnen mit zusätzlichen nicht Standardkonstruktoren sind.

Ich versuche, aus openpojo

Ich habe die Reifen getreten, und es scheint, den Job zu tun.

  1. Es erlaubt Ihnen, alle pojo die in Ihrem Projekt zu überprüfen.
  2. Es scheint, die besten Praktiken auf pojo der
  3. prüfen

In dieser Anleitung für einen schnellen Start Tutorial

Die Beantwortung der vorherigen Kommentar unter @ me hier wegen meines Rufes:

  

Vlookward, nicht schriftlich Getter / Setter macht überhaupt keinen Sinn. Die einzigen Optionen für die Einstellung private Felder explizit Setter haben, sie in Ihrem Konstruktor zu setzen, oder die indirekt über andere Methoden zu setzen (funktionell die Setter an einen anderen Ort aufzuschieben). Warum nicht Setter verwenden?

Nun, manchmal gibt es keine Notwendigkeit, sich auf das Gebiet privat sein (Sorry, wenn mein Englisch ist nicht sehr gut). Oft schreiben wir unsere Software, da es eine Bibliothek und wir kapseln unsere Felder (unsere Geschäftslogik Felder) mit unnötigen Getter / Setter.

Andere Zeiten, dass Methoden tatsächlich notwendig sind. Dann gibt es zwei Möglichkeiten:
1. Es gibt Business-Logik in ihnen. Dann sould sie getestet werden, aber sie sind nicht wirklich Getter / Setter. Ich schreibe immer diese Logik in anderen Klassen. Und die Tests testen, dass andere Klassen, nicht die POJO .
2. Es gibt nicht. Dann schreiben Sie sie nicht mit der Hand, wenn Sie können. Zum Beispiel kann eine Implementierung für die nächste Schnittstelle vollständig (und auch im laufenden Betrieb!) Automatisch erzeugt werden:

interface NamedAndObservable {
  String getName();
  void setName(String name);
  void addPropertyChangeListener(PropertyChangeListener listener);
  void addPropertyChangeListener(String propertyName,
                                 PropertyChangeListener listener);
}

So Test nur das, was von Hand geschrieben. Egal, ob es sich um eine Getter / Setter.

Ich schreibe Testfälle für jede Eigenschaft, nicht, sondern alle der Setter / Getter in einem einzigen Testfall testen Reflexion / Introspector mit der Art (en) zu bestimmen. Hier ist eine große Ressource, die dies zeigt:

http://www.nearinfinity.com/blogs/scott_leberknight/do_you_unit_test_getters.html

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