Si je devais deviner l'intention de votre question, je dirais:
- Vous voulez des vérifications raisonnables pour les constructeurs privés qui font un travail réel, et
- Vous voulez que Clover exclut les constructeurs vides pour les classes util.
Pour 1, il est évident que vous souhaitez que toutes les initialisations soient effectuées via des méthodes d'usine. Dans de tels cas, vos tests devraient pouvoir tester les effets secondaires du constructeur. Cela devrait entrer dans la catégorie des tests de méthodes privées normales. Réduisez la taille des méthodes afin qu'elles ne fassent qu'un nombre limité de choses déterminées (idéalement, juste une chose et une chose bien), puis testez les méthodes qui reposent sur elles.
Par exemple, si mon constructeur [privé] configure les champs d'instance de ma classe a
sur 5
. Ensuite, je peux (ou plutôt dois) le tester:
@Test
public void testInit() {
MyClass myObj = MyClass.newInstance(); //Or whatever factory method you put
Assert.assertEquals(5, myObj.getA()); //Or if getA() is private then test some other property/method that relies on a being 5
}
Pour 2, vous pouvez configurer clover pour exclure les constructeurs Util si vous avez un modèle de dénomination défini pour les classes Util. Par exemple, dans mon propre projet, j'utilise quelque chose comme ceci (parce que nous suivons la convention selon laquelle les noms de toutes les classes Util doivent se terminer par Util):
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+Util *( *) *"/>
</clover-setup>
J'ai délibérément laissé de côté un .*
suivant )
parce que de tels constructeurs ne sont pas destinés à lancer des exceptions (ils ne sont pas destinés à faire quoi que ce soit).
Il peut bien sûr y avoir un troisième cas où vous voudrez peut-être avoir un constructeur vide pour une classe non utilitaire. Dans de tels cas, je vous recommande de mettre un methodContext
avec la signature exacte du constructeur.
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+Util *( *) *"/>
<methodContext name="myExceptionalClassCtor" regexp="^private MyExceptionalClass()$"/>
</clover-setup>
Si vous avez beaucoup de classes exceptionnelles, vous pouvez choisir de modifier le constructeur privé généralisé reg-ex que j'ai suggéré et de le supprimer Util
. Dans ce cas, vous devrez vous assurer manuellement que les effets secondaires de votre constructeur sont toujours testés et couverts par d'autres méthodes dans votre classe / projet.
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+ *( *) .*"/>
</clover-setup>