यदि मैं आपके प्रश्न के इरादे का अनुमान लगाता तो मैं कहता:
- आप निजी बिल्डरों के लिए उचित जांच चाहते हैं जो वास्तविक काम करते हैं, और
- आप उपयोग कक्षाओं के लिए खाली कंस्ट्रक्टर को बाहर करने के लिए तिपतिया घास चाहते हैं।
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-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>
यदि आपके पास कई ऐसी असाधारण कक्षाएं हैं, तो आप मेरे द्वारा सुझाए गए सामान्यीकृत निजी कंस्ट्रक्टर रेग-एक्स को संशोधित करने और Util
इसे हटाने का विकल्प चुन सकते हैं । इस मामले में, आपको मैन्युअल रूप से यह सुनिश्चित करना होगा कि आपके निर्माता के दुष्प्रभाव अभी भी आपकी कक्षा / परियोजना में अन्य तरीकों से परीक्षण और कवर किए गए हैं।
<clover-setup initString="${build.dir}/clovercoverage.db" enabled="${with.clover}">
<methodContext name="prvtCtor" regexp="^private *[a-zA-Z0-9_$]+ *( *) .*"/>
</clover-setup>