Si tuviera que adivinar la intención de su pregunta, diría:
- Quiere verificaciones razonables para constructores privados que realicen un trabajo real, y
- Desea que clover excluya los constructores vacíos para las clases de servicios.
Para 1, es obvio que desea que toda la inicialización se realice a través de métodos de fábrica. En tales casos, sus pruebas deberían poder probar los efectos secundarios del constructor. Esto debería caer en la categoría de prueba de método privado normal. Haga los métodos más pequeños para que solo hagan un número limitado de cosas determinadas (idealmente, solo una cosa y una cosa bien) y luego pruebe los métodos que se basan en ellos.
Por ejemplo, si mi constructor [privado] configura los campos de instancia de mi clase a
en 5
. Entonces puedo (o más bien debo) probarlo:
@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
}
Para 2, puede configurar clover para excluir los constructores Util si tiene un patrón de nomenclatura establecido para las clases Util. Por ejemplo, en mi propio proyecto utilizo algo como esto (porque seguimos la convención de que los nombres de todas las clases de Util deben terminar con Util):
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+Util *( *) *"/>
</clover-setup>
Deliberadamente he omitido un .*
siguiente)
porque tales constructores no están destinados a lanzar excepciones (no están destinados a hacer nada).
Por supuesto, puede haber un tercer caso en el que desee tener un constructor vacío para una clase que no sea de utilidad. En tales casos, le recomendaría que coloque un methodContext
con la firma exacta del constructor.
<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 tiene muchas de estas clases excepcionales, puede elegir modificar el constructor privado generalizado reg-ex que sugerí y eliminarlo Util
. En este caso, deberá asegurarse manualmente de que los efectos secundarios de su constructor aún se prueben y cubran con otros métodos en su clase / proyecto.
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+ *( *) .*"/>
</clover-setup>