Se eu fosse adivinhar a intenção de sua pergunta, diria:
- Você quer verificações razoáveis para construtores privados que fazem o trabalho real, e
- Você deseja que o trevo exclua os construtores vazios das classes util.
Para 1, é óbvio que você deseja que toda a inicialização seja feita através dos métodos de fábrica. Nesses casos, seus testes devem ser capazes de testar os efeitos colaterais do construtor. Isso deve cair na categoria de teste de método privado normal. Faça os métodos menores para que eles façam apenas um número limitado de coisas determinadas (idealmente, apenas uma coisa e uma coisa bem) e, em seguida, teste os métodos que dependem deles.
Por exemplo, se meu construtor [privado] configurar os campos de instância de minha classe a
para 5
. Então eu posso (ou melhor, devo) testá-lo:
@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, você pode configurar o trevo para excluir construtores Util se você tiver um padrão de nomenclatura definido para classes Util. Por exemplo, em meu próprio projeto eu uso algo assim (porque seguimos a convenção de que os nomes de todas as classes Util devem terminar com Util):
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+Util *( *) *"/>
</clover-setup>
Eu deixei deliberadamente de fora um .*
seguinte )
porque tais construtores não pretendem lançar exceções (eles não pretendem fazer nada).
É claro que pode haver um terceiro caso em que você pode querer ter um construtor vazio para uma classe não utilitária. Nesses casos, recomendo que você coloque um methodContext
com a assinatura exata do construtor.
<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>
Se você tiver muitas dessas classes excepcionais, poderá escolher modificar o construtor privado generalizado reg-ex que sugeri e remover Util
dele. Nesse caso, você terá que se certificar manualmente de que os efeitos colaterais do construtor ainda sejam testados e cobertos por outros métodos em sua classe / projeto.
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+ *( *) .*"/>
</clover-setup>