Bien qu'il existe des raisons justifiées pour les propriétés, une croyance commune en matière de conception orientée objet veut que l'exposition de l'état des membres via les propriétés soit une mauvaise conception. Article de Robert Martin sur le principe de l'ouverture et de la fermeture. poursuit en affirmant que les propriétés encouragent le couplage et limitent donc la possibilité de fermer une classe aux modifications - si vous modifiez la propriété, tous les consommateurs de la classe devront également le faire. Il précise que l'exposition des variables membres n'est pas nécessairement une mauvaise conception, mais simplement un mauvais style. Cependant, si les propriétés sont en lecture seule, il y a moins de risques d'abus et d'effets secondaires.
La meilleure approche que je puisse proposer pour les tests unitaires (et cela peut paraître étrange) est de rendre le plus grand nombre possible de propriétés protégées ou internes. Cela permet d'éviter le couplage tout en décourageant l'écriture de tests stupides pour les getters et setters.
Il existe des raisons évidentes pour lesquelles les propriétés en lecture/écriture doivent être utilisées, comme les propriétés du ViewModel qui sont liées aux champs de saisie, etc.
De manière plus pratique, les tests unitaires devraient conduire la fonctionnalité à travers les méthodes publiques. Si le code que vous testez utilise ces propriétés, vous obtenez une couverture de code gratuite. S'il s'avère que ces propriétés ne sont jamais mises en évidence par le code-coverage, il y a une très forte possibilité que :
- Il vous manque des tests qui utilisent indirectement les propriétés
- Les propriétés sont inutilisées
Si vous écrivez des tests pour les getters et setters, vous obtenez une fausse impression de couverture et vous ne serez pas en mesure de déterminer si les propriétés sont réellement utilisées par le comportement fonctionnel.
0 votes
Je ne pense pas. Vous ne devez pas écrire de scénario de test pour les getter/setter.
1 votes
Je suppose que vous voulez dire Java ? C'est une question particulièrement aiguë pour Java, beaucoup moins pour les langages plus modernes.
0 votes
Quels sont les langages modernes qui n'ont pas de propriétés ? Bien sûr, des langages comme Java exigent qu'elles soient des corps de méthode complets, mais cela ne les rend pas logiquement différentes de C#, par exemple.
2 votes
@Claus : Il n'a pas dit propriétés, il a dit getters et setters. En Java, vous les écrivez manuellement, dans d'autres langages, vous bénéficiez d'un meilleur support.
2 votes
On peut se demander pourquoi avoir des g g gett g et des sett g du tout .