मेरे पास मेरे परीक्षण सूट में एक परीक्षण है जो कुछ इस तरह से जाता है:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
यह परीक्षण मेरी अपेक्षा के अनुसार काम करता है, लेकिन जब मैं इसे चलाता हूं तो xUnit चेतावनी देता है:
चेतावनी xUnit2013: संग्रह आकार की जांच करने के लिए Assert.Equal () का उपयोग न करें।
हालाँकि, चेतावनी में कोई विकल्प नहीं सुझाया गया है, और एक Google खोज मुझे इस परीक्षण के स्रोत xUnit में स्रोत कोड पर ले जाती है जो इस चेतावनी को सत्यापित करता है, मुद्रित होता है।
यदि Assert.Equal()
संग्रह की लंबाई को सत्यापित करने का सही तरीका नहीं है, तो क्या है?
स्पष्ट करने के लिए: मुझे एहसास हुआ कि मैं इस चेतावनी को "छल" नहीं कर सकता, जैसे कि एक चर निकालने या Assert.True(stuff.Count() == 1)
इसके बजाय उपयोग करके इस चेतावनी को नहीं छोड़ना । उत्तरार्द्ध सिर्फ हैक है, और पूर्व की तरह लगता है कि अगर xUnit एक के कई पुनरावृत्तियों से बचने की कोशिश कर रहा है जैसे IEnumerable<T>
, तो यह जाने का गलत तरीका है (क्योंकि मुझे इसके बारे में अलग से संकलक संकेत मिलेंगे यदि यह एक मुद्दा है), और xnnit स्वयं को कभी भी एक से अधिक बार इनपुट का मूल्यांकन नहीं करना चाहिए (वास्तव में यह शायद वैसा ही इनपुट प्राप्त करेगा, क्योंकि C # फ़ंक्शन कॉलिंग कार्य कैसे होता है)।
इसलिए, मुझे अपने आउटपुट से उस चेतावनी को हटाने में कोई दिलचस्पी नहीं है। मेरे प्रश्न का उत्तर यह भी बताता है कि क्यों उस चेतावनी को पहली बार पुस्तकालय में शामिल किया गया है और इसके बजाय मुझे जो भी दृष्टिकोण का उपयोग करना चाहिए वह बेहतर क्यों है।
stuffCollection.Count()
एक अलग चर में संग्रहित करते हैं और इसे पास करते हैं तो क्या यह आपको वही त्रुटि देता है?