27 votes

Existe-t-il un framework de tests unitaires Java qui teste automatiquement les getters et setters?

Il est bien connu débat en Java (et d'autres communautés, j'en suis sûr) si oui ou non trivial getter/setter doivent être testés. Généralement, c'est à l'égard de la couverture de code. Admettons que c'est un débat ouvert, et de ne pas essayer d'y répondre ici.

Il y a eu plusieurs messages de blog sur l'utilisation de Java réflexion à l'auto-test de telles méthodes.

N'importe quel cadre (par exemple, jUnit) fournir une telle fonctionnalité? par exemple, Une annotation qui dit "ce test T de l'auto-test de tous les getters/setters sur la classe C, parce que je affirment qu'ils sont standard".

Il me semble qu'il serait ajouter de la valeur, et si elle est configurable, le "débat" devrait être laissé comme une option pour l'utilisateur.

15voto

Olaf Kock Points 18072

Je ne suis pas au courant de tout facilement disponibles dans la bibliothèque de classe ou de qui ne de cette. Cela peut être principalement parce que je n'aime pas comme je suis du côté de fortement s'opposer à ces tests. Donc, même si vous l'avez demandé, il doit être un peu de la justification de ce point de vue:

Je doute que autotesting getters et les setters de bénéficier de votre code de qualité ou de votre zone de couverture: ces méthodes sont utilisées à partir de l'autre code (et testé il y a, par exemple, couvertes à 100%) ou n'est pas utilisé à toutes (et peut être supprimé). Vous allez quitter getters et setters parce qu'ils sont utilisés à partir de l'épreuve, mais nulle part ailleurs dans l'application.

Il devrait être facile d'écrire un tel test, par exemple avec Apache Commons BeanUtils, mais je doute que vous en avez vraiment besoin, si vous avez de bons tests autrement.

7voto

Osman Shoukry Points 79

J'ai créé le OpenPojo projet de résolution exacte du problème.

Le projet permet de valider:

  • Appliquer Pojo norme de codage (c'est à dire Tous les domaines privé, ou aucun natif de variables, etc...)
  • Appliquer Pojo comportement (setter n'a tout SIMPLEMENT pas de transformation, etc)
  • Valider Pojo Identité (c'est à dire Utiliser l'annotation basée sur l'égalité & hashcode génération)

Voir Le Tutoriel

6voto

Horcrux7 Points 8369

Dans la plupart des cas, setter et getter faire plus que seulement de réglage et d'obtenir un champ interne. Un Objet a plus qu'à vérifier les règles internes qui détiennent uniquement des valeurs valides. Par exemple

  • sont les valeurs null possible?
  • sont des chaînes vides possible?
  • ou des valeurs négatives?
  • ou une valeur de zéro?
  • ou des valeurs d'une liste sont-ils valables?
  • ou est-il une valeur maximale?
  • ou est-il un maximum de précision sur BigDecimal valeurs?

Le test unitaire doit vérifier si le comportement correct si il y a des valeurs non valides. Cela ne peut pas être automatisé.

Si vous n'avez pas de logique sur le setter et getter alors il doit être utilisé n'importe où dans votre application. Écrire un test où votre objet est un paramètre pour un test plus complexes. Vous pouvez le tester ensuite avec les différentes valeurs de la liste.

Testez votre logique métier et de ne pas les getter et setter. Le résultat doit également d'une couverture de la getter et setter. Les méthodes doivent être aucun résultat dans votre logique métier aussi, si vous avez seulement une bibliothèque publique. Si les getter et setter ont pas de couverture de code, puis l'a supprimé.

5voto

Kevin Wong Points 3730

Unitils le fait avec la méthode statique assertRefEquals .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X