क्या इस तरह से आस्थगित दावे जोड़ना ठीक है [..]
नहीं , यह नहीं है। क्यों? क्योंकि यदि आप किसी भी कारण से दूसरे दावे को हटाते हैं तो परीक्षण अभी भी हरा हो जाएगा और आपको लगता है कि यह अभी भी काम करेगा, लेकिन ऐसा नहीं है कि संग्रह की गणना नहीं होगी। यदि आपके पास दो या अधिक स्वतंत्र दावे हैं तो वे अपना काम करते रहेंगे भले ही आप उनमें से किसी एक को अक्षम कर दें।
इस संयोजन पर विचार करें:
Assert.IsTrue(actualKittens.All(x => x.IsCute());
CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList());
अब भले ही आप इनमें से एक को निष्क्रिय कर दें या हटा दें, फिर भी दूसरा अपना काम करेगा। यदि आप संग्रह को भौतिक बनाना भूल जाते हैं, तो इसे चलाने में अधिक समय लग सकता है, लेकिन यह अभी भी काम कर रहा है। स्वतंत्र परीक्षण अधिक मजबूत और विश्वसनीय होते हैं।
एक दूसरा भी नहीं है । मुझे यकीन नहीं है कि अन्य रूपरेखाएं इसे कैसे संभालती हैं लेकिन यदि आप एमएस टेस्ट प्लेटफॉर्म का उपयोग कर रहे हैं तो आपको नहीं पता होगा कि कौन सा परीक्षण विफल रहा। यदि आप असफल परीक्षण पर डबल क्लिक करते हैं, तो यह आपको CollectionAssert
उतना ही विफल दिखाएगा लेकिन वास्तव में यह नेस्टेड था जो Assert
गलत हो गया था और यह डीबग करना बहुत कठिन होगा। यहाँ एक उदाहरण है:
[TestMethod]
public void TestMethod()
{
var numbers = new[] { 1, 2, 3 }.Select(x =>
{
Assert.Fail("Wrong number.");
return x;
});
// This will fail and you won't be sure why.
CollectionAssert.AreEqual(new[] { 1, 2, 3 }, numbers.ToList());
}
इसका मतलब यह है कि पहला परीक्षण वास्तव में बेकार है क्योंकि यह बग खोजने में मदद नहीं करता है। आपको नहीं पता कि यह विफल हुआ क्योंकि कोई संख्या अमान्य थी या क्योंकि दोनों संग्रह अलग-अलग थे।
क्यों? इसलिए मैं भौतिकतावादी संग्रह की अपेक्षा करने वाले बयानों के साथ एक बार भी पुनरावृति कर सकता हूं
मुझे आश्चर्य है कि आप इसकी परवाह क्यों करते हैं? ये यूनिट टेस्ट हैं। आपको उनमें से हर बिट का अनुकूलन करने की आवश्यकता नहीं है और आमतौर पर परीक्षणों में लाखों वस्तुओं की आवश्यकता नहीं होती है, इसलिए प्रदर्शन को चिंता का विषय नहीं होना चाहिए।
आपको ऐसे परीक्षणों को बनाए रखने की आवश्यकता होगी, इसलिए आपको उन्हें और अधिक जटिल बनाना चाहिए, फिर आवश्यक क्यों? सरल मुखर लिखें जो काम करते हैं।
sequence.WithSideEffect(item => Assert.IsCute(item))
क्लीनर बनाने के लिए एक सहायक कार्य कर सकते हैं ।