Якби я вгадував наміри вашого запитання, я сказав би:
- Ви хочете обґрунтувати перевірку приватних будівельників, які виконують фактичну роботу, і
- Ви хочете, щоб конюшина виключала порожні конструктори для класів 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>