2011-01-10 1 views
1

J'écris des tests unitaires pour les classes qui ont des propriétés qui ont setters mais pas getters.Comment faire pour tester des setters sur des classes qui n'ont pas de getters jumelés?

Je veux pouvoir tester ces setters pour m'assurer qu'ils règlent les données correctement.

je trouve mes options sont:

  • apporteurs d'écriture pour ces fonctions afin que je puisse tester si elles sont correctement définies
  • écrire une méthode telle que testAllSetters() qui les tester à la fois

Mais les deux solutions sont indésirables car elle ajoute des fonctionnalités inutiles à la classe juste pour le tester.

  • Je pourrais aussi tester la sortie de la classe pour voir qu'il est correct en général, mais dans de nombreux cas, cela ne teste pas les setters individuels que je voudrais

Quelle est la La meilleure façon d'établir des setters de test sur des classes qui n'ont pas de getters jumelés?

+0

J'ai marqué ce _C#, accesseurs, getters-setters_ car il semble spécifique à la langue. – smci

Répondre

2

Le problème ici est que votre ne voulez pas changer votre API pour vos tests unitaires. Commencez à regarder vos tests unitaires comme un autre utilisateur/consommateur de votre API. Tout comme les développeurs utilisant cette bibliothèque, les tests unitaires ont leurs propres exigences. Quand vous voyez vos tests unitaires en tant que consommateur de votre API, il y aura un utilisateur qui utilisera ces getters, et cela les justifiera. Lorsque cela n'est pas possible de changer votre API (par exemple si vous développez un cadre réutilisable), rendez l'API de test unitaire interne et utilisez le InternalsVisibleToAttribute pour permettre à votre bibliothèque de test d'accéder aux méthodes internes de votre code. Laissant de côté les tests unitaires, vous pouvez toujours envisager d'avoir des getters sur ces propriétés, car avoir des propriétés sans getters est très peu intuitif pour les développeurs. Le Framework Design Guidelines ont même une règle contre ceci:

NE PAS fournir des propriétés mis uniquement ou propriétés avec le poseur ayant l'accessibilité plus large que le getter.

Vous pouvez également prendre cela en considération.

Bonne chance.

1

Vous pouvez utiliser PrivateObject pour vérifier les membres privés ont été mis à jour correctement après avoir appelé le poseur

0

Les setters ont-ils une logique quelconque?

Oui: Ouvrez le getter. Java: protégé et faire tester l'unité dans le même paquet. C#: InternalsVisibleToAttribute.

Non: Ne pas régler les setters directement. Pas de point. Testez les méthodes qui utilisent l'ensemble de données par les setters.

Questions connexes