Если бы я угадал цель вашего вопроса, я бы сказал:
- Требуются разумные проверки для частных конструкторов, выполняющих реальную работу, и
- Вы хотите, чтобы Clover исключил пустые конструкторы для классов util.
Для 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 вы можете настроить клевер для исключения конструкторов 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>