Question

Mon équipe de développement a commencé à utiliser Mockito et ont des classes qui ont été définies comme « finale ». Je l'ai lu en Java efficace par Joshua Bloch et dans le fil SO Quand utiliser final toutes les classes doivent utiliser le modificateur final. Il y a eu un certain désaccord dans le fil, mais je suis d'accord avec l'idée de forcer la composition des classes, sauf héritage sens.

Que dois-je faire quand je veux tester des classes en utilisant un framework de test comme Mockito qui nécessite des classes de ne pas avoir le modificateur « final »? J'espère que quelqu'un d'autre a rencontré des problèmes similaires lors de leur développement. Quelles résolutions ce que votre équipe de développement arrivent sur?

Il y a deux réponses évidentes telles que l'utilisation JMock ou supprimer le modificateur « final » sur les classes que nous voulons tester, mais nous voulons en tenir à un cadre de tests externes (en plus JUnit) et il peut être difficile de convaincre les autres développeurs pour éliminer le modificateur 'final'.

Merci.

Était-ce utile?

La solution

Qu'est-ce que vous avez besoin le plus:

  1. La possibilité de faire en sorte que quelqu'un ne hérite pas de votre classe ou
  2. La capacité de vous assurer que votre code est testable en utilisant votre cadre moqueur de choix?

En général, je crois que vous n'avez pas besoin d'appliquer (1). Pour moi, testabilité (2), est beaucoup plus important. Ce qui convient le mieux?

Autres conseils

Si vous voulez que vos cours soient finale, vous pouvez les mettre en œuvre des interfaces. Les interfaces sont mockable.

Comme déjà mentionné dans l'autre réponse que vous pouvez faire vos classes finales à mettre en œuvre interface (s) et dans vos tests raillent l'interface (s).

Ceci est l'un des avantages de l'utilisation des objets simulés; dans des scénarios comme celui-ci, ils vous font réfléchir à la façon peut être mieux organisé le code. Si votre base de code a beaucoup de référence aux classes finales (donc contraignantes pour la mise en œuvre concrète), il viole le principe OO de « programmation à une interface » et la nécessité d'une meilleure testabilité vous aiderait à penser à refactoring pour éliminer la dépendance sur des applications concrètes.

Ce document sur l'utilisation des objets Mock Endo-test: Tests unitaires avec des objets Mock a une section (4.4) intitulé découverte d'interface qui explique comment les objets mock aider à découvrir les interfaces.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top