यह एक वैध परीक्षण है (हालांकि बल्कि अति उत्साही) और मैं कभी-कभी निर्माण तर्क का परीक्षण करने के लिए भी करता हूं, हालांकि जैसा कि Laiv ने टिप्पणियों में उल्लेख किया है कि आपको खुद से क्यों पूछना चाहिए।
यदि आपका निर्माता इस तरह दिखता है:
public Person(Guid guid, DateTime dob)
{
this.Guid = guid;
this.Dob = dob;
}
क्या यह परीक्षण में बहुत सारे बिंदु हैं कि क्या यह फेंकता है? क्या मापदंडों को सही ढंग से सौंपा गया है, मैं समझ सकता हूं लेकिन आपका परीक्षण बल्कि ओवरकिल है।
हालाँकि, यदि आपका परीक्षण कुछ ऐसा करता है:
public Person(Guid guid, DateTime dob)
{
if(guid == default(Guid)) throw new ArgumentException("Guid is invalid");
if(dob == default(DateTime)) throw new ArgumentException("Dob is invalid");
this.Guid = guid;
this.Dob = dob;
}
तब आपका परीक्षण अधिक प्रासंगिक हो जाता है (जैसा कि आप वास्तव में कोड में कहीं अपवाद छोड़ रहे हैं)।
एक बात मैं कहूंगा, आम तौर पर आपके निर्माता में बहुत सारे तर्क होने के लिए यह बुरा अभ्यास है। मूल सत्यापन (जैसा कि मैं ऊपर कर रहा हूँ / डिफ़ॉल्ट चेक) ठीक है। लेकिन अगर आप डेटाबेस से जुड़ रहे हैं और किसी के डेटा को लोड कर रहे हैं, तो यह वह जगह है जहां कोड वास्तव में गंध करना शुरू कर देता है ...
इस वजह से, यदि आपका कंस्ट्रक्टर परीक्षण के लायक है (क्योंकि वहां बहुत तर्क चल रहे हैं) तो शायद कुछ और गलत है।
आप निश्चित रूप से व्यावसायिक तर्क परतों में इस वर्ग को कवर करने वाले अन्य परीक्षण करने जा रहे हैं, निर्माता और चर असाइनमेंट लगभग निश्चित रूप से इन परीक्षणों के लिए पूर्ण कवरेज प्राप्त करने जा रहे हैं। इसलिए यह विशेष रूप से निर्माणकर्ता के लिए विशिष्ट परीक्षणों को जोड़ने के लिए व्यर्थ है। हालाँकि, कुछ भी श्वेत-श्याम नहीं है और मुझे इन परीक्षणों के खिलाफ कुछ भी नहीं होगा अगर मैं कोड की समीक्षा कर रहा था - लेकिन मैं सवाल करूंगा कि क्या वे आपके समाधान में कहीं और परीक्षण के ऊपर और उससे अधिक मूल्य जोड़ते हैं।
आपके उदाहरण में:
public Person(Id id, DateTime dateOfBirth) :
base(id)
{
if (dateOfBirth == null)
throw new ArgumentNullException("Date of Birth");
elseif (dateOfBith < new DateTime(1900,01,01)
throw new ArgumentException("Date of Birth");
DateOfBirth = dateOfBirth;
}
आप न केवल सत्यापन कर रहे हैं, बल्कि आप एक बेस कंस्ट्रक्टर भी कह रहे हैं। मेरे लिए यह इन परीक्षणों के लिए अधिक कारण प्रदान करता है क्योंकि उनके पास निर्माणकर्ता / सत्यापन तर्क है जो अब दो वर्गों में विभाजित हो गए हैं जो दृश्यता कम हो जाती है और अप्रत्याशित परिवर्तन का खतरा बढ़ जाता है।
TLDR
इन परीक्षणों के लिए कुछ मूल्य है, हालांकि आपके समाधान में सत्यापन / असाइनमेंट लॉजिक को अन्य परीक्षणों द्वारा कवर किए जाने की संभावना है। अगर इन रचनाकारों में बहुत सारे तर्क हैं, जिन्हें महत्वपूर्ण परीक्षण की आवश्यकता है, तो यह मुझे सुझाव देता है कि वहां एक गंदा कोड गंध है।