मुझे नेट 4.0 में कोड अनुबंधों के साथ एक खेल है और मुझे कुछ स्पष्ट याद आना चाहिए क्योंकि वे अपेक्षा नहीं कर रहे हैं क्योंकि मैं अपेक्षा करता हूं।यूनिट परीक्षण कोड अनुबंध
मैंने हमेशा एक सरल उपयोग किया है ... फिर .. फ़ंक्शन की शुरुआत में कोई सत्यापन करने के लिए कथन फेंक दें।
if (hours < 0 || hours > 8)
throw new ArgumentOutOfRangeException("hours", "Hours must be between 0 and 8");
मैं बस
Contract.Requires<ArgumentOutOfRangeException>(hours >= 0 && hours <= 8, "Hours must be between 0 and 8");
के साथ इस जगह ले ली है लेकिन यह कभी मेरी इकाई परीक्षण पर एक मुद्दा फेंक रहा है।
public static DurationUnit HoursAsDuration(int hours)
{
Contract.Requires<ArgumentOutOfRangeException>(hours >= 0 && hours <= 8, "Hours must be between 0 and 8");
switch (hours)
{
case 1:
case 2:
return DurationUnit.Quarter;
case 3:
case 4:
return DurationUnit.Half;
case 5:
case 6:
return DurationUnit.ThreeQuarter;
case 7:
case 8:
return DurationUnit.Full;
default:
return DurationUnit.None;
}
}
[Test]
public void CanConvertToDuration()
{
Assert.AreEqual(DurationUnit.None, DateTimeUtility.HoursAsDuration(0));
Assert.AreEqual(DurationUnit.Quarter, DateTimeUtility.HoursAsDuration(1));
Assert.AreEqual(DurationUnit.Quarter, DateTimeUtility.HoursAsDuration(2));
Assert.AreEqual(DurationUnit.Half, DateTimeUtility.HoursAsDuration(3));
Assert.AreEqual(DurationUnit.Half, DateTimeUtility.HoursAsDuration(4));
Assert.AreEqual(DurationUnit.ThreeQuarter, DateTimeUtility.HoursAsDuration(5));
Assert.AreEqual(DurationUnit.ThreeQuarter, DateTimeUtility.HoursAsDuration(6));
Assert.AreEqual(DurationUnit.Full, DateTimeUtility.HoursAsDuration(7));
Assert.AreEqual(DurationUnit.Full, DateTimeUtility.HoursAsDuration(8));
//Would expect this to cause an issue
Assert.AreEqual(DurationUnit.None, DateTimeUtility.HoursAsDuration(9));
}
परीक्षण सच रिटर्न लेकिन मैं "9" स्विच बयान में होने का मूल्य को रोकने के लिए कोड अनुबंध की उम्मीद है। क्या यह अपेक्षित व्यवहार है?
धन्यवाद पास्कल जो कुछ चीजों को स्पष्ट करता है। मुझे विश्वास था कि कोड अनुबंध सभी पैरामीटर चेक को प्रतिस्थापित कर सकते हैं लेकिन अगर उन्हें उत्पादन निर्माण में चाहिए तो उन्हें अभी भी रहना होगा। – fluent
अद्यतन: नीचे दिए गए पोर्ग ने मुझे उत्पादन निर्माण में अनुबंध सक्षम करने के लिए परियोजना सेटिंग्स को संपादित करने के साथ सही दिशा में इंगित किया है। – fluent