Если бы я угадал цель вашего вопроса, я бы сказал:
- Вам нужны разумные проверки для частных конструкторов, которые действительно работают, и
- Вы хотите, чтобы клевер исключал пустые конструкторы для служебных классов.
Для 1 очевидно, что вы хотите, чтобы вся инициализация выполнялась с помощью заводских методов. В таких случаях ваши тесты должны уметь проверять побочные эффекты конструктора. Это должно подпадать под категорию обычного тестирования частного метода. Уменьшите размеры методов, чтобы они выполняли только ограниченное количество определенных действий (в идеале, только одно и одно хорошо), а затем протестируйте методы, которые на них полагаются.
Например, если мой [частный] конструктор устанавливает для полей экземпляра моего класса a
значение 5
. Тогда я могу (точнее, должен) протестировать это:
@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
}
Для 2 вы можете настроить clover для исключения конструкторов Util, если у вас есть установленный шаблон именования для классов Util. Например, в моем собственном проекте я использую что-то вроде этого (потому что мы следуем соглашению, согласно которому имена всех классов Util должны заканчиваться на Util):
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+Util *( *) *"/>
</clover-setup>
Я намеренно пропустил .*
следующее)
потому что такие конструкторы не предназначены для создания исключений (они не предназначены для чего-либо).
Конечно, может быть и третий случай, когда вам может потребоваться пустой конструктор для некоммерческого класса. В таких случаях я бы порекомендовал вам поставить methodContext
точную подпись конструктора.
<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>
Если у вас много таких исключительных классов, вы можете изменить предложенный мной обобщенный частный конструктор reg-ex и удалить Util
из него. В этом случае вам придется вручную убедиться, что побочные эффекты вашего конструктора по-прежнему протестированы и покрываются другими методами в вашем классе / проекте.
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+ *( *) .*"/>
</clover-setup>