विजुअल स्टूडियो प्रोफेसरोन 2008 की टेस्ट क्षमताओं में प्रारंभिक, असफल इकाई परीक्षण बनाने के प्रयास में ऑब्जेक्ट। रेफरेंस एक्वाल्स() पास करता है जहां मुझे 'झूठा' देता है, मुझे Assert.ReferenceEquals()
प्राप्त नहीं हो रहा है जब कोई ऑब्जेक्ट उदाहरण शून्य संदर्भ के बराबर होता है तो सही ढंग से विफल हो जाता है। ध्यान दें कि object.ReferenceEquals()
इसी तुलना के लिए false
सही ढंग से लौट रहा है। ,Assert.ReferenceEquals() विजुअल स्टूडियो टेस्ट
[TestClass()]
public class ProjectTest
{
[TestMethod()]
public void StartupTest()
{
object obj = "hello";
Project.Startup(obj);
Assert.ReferenceEquals(obj, Project.TheObject); // Test Passes!?!
}
}
ध्यान दें कि static void Startup(object)
विधि रिक्त है तो static object TheObject
संपत्ति नहीं है:
public static class Project
{
public static object TheObject { get; set; }
public static void Startup(object theObject)
{
// ToDo: Project.Startup(): Test.
// ToDo: Project.Startup(): Implement.
}
}
और फिर यहाँ अपने परीक्षण वर्ग के महत्वपूर्ण पहलुओं हैं:
यहाँ मेरी कक्षा कोड है सेट करें और null
बनी हुई है। तो, स्पष्ट रूप से, Assert.ReferenceEquals(obj, Project.TheObject)
विफल होना चाहिए, लेकिन किसी भी तरह से यह परीक्षण गुजरता है।
ध्यान दें कि
Assert.ReferenceEquals(obj, Project.TheObject)
बदलते सही ढंग से को
Assert.IsTrue(object.ReferenceEquals(obj, Project.TheObject))
इस परीक्षण का कारण बनता है असफल।
यह बहुत आसान लगता है, और फिर भी मैं नहीं देख सकता कि यहां क्या गलत हो रहा है। अगर कोई मेरे तरीके से त्रुटि को इंगित कर सकता है, तो मैं बहुत बाध्य होगा।
अग्रिम धन्यवाद,
माइक
अद्यतन जेम्स एवरी से उत्तर दिया:
आह, एक कैसे मूर्ख मैं अब लग रहा है। मैं जानता था इसे ऐसा कुछ होना था। वाह।
निश्चित रूप से, 'GoToDefinition' मुझे 'ऑब्जेक्ट। ReferenceEquals()' पर ले जाता है। तो टाइपिंग "Assert.ReferenceEquals()" वास्तव में System.Object.ReferenceEquals() है, जो मेरे मामले में चुपचाप 'झूठी' लौट रहा था। यह, ज़ाहिर है, वास्तव में किसी दावे में असफल होने के साथ कुछ लेना देना नहीं है, इसलिए परीक्षण पास करता है। गजब का।
धन्यवाद जेम्स।
मुझे अभी भी इसी मूर्खतापूर्ण गलती से मारा गया है। यह गिरने के लिए इतना आसान जाल है। ऐसा लगता है कि यूनिट टेस्ट क्लासेस कम से कम चेतावनी फेंक सकते हैं यदि कोई वास्तविक दावा नहीं कहा जाता है। इससे कम से कम आपके नमूना कोड जैसे नमूने कोड और विशेष संपत्ति जांच को पूरा करने का प्रयास करने वाले बहुत ही सरल मामलों को पकड़ लिया जाएगा। –
"ऐसा लगता है कि यूनिट टेस्ट क्लासेस कम से कम चेतावनी फेंक सकते हैं यदि कोई वास्तविक दावा नहीं कहा जाता है।" <- यह एक मूर्खतापूर्ण विचार है और न केवल इस मूर्खतापूर्ण जाल के खिलाफ सुरक्षा के लिए। मुझें यह पसंद है। –
एक बेहतर विचार, हालांकि, 'रेफरेंस एक्वाल्स' नामक एक नई स्थैतिक विधि बनाने के लिए आर्टर्ट क्लास के लिए होगा जो 'ऑब्जेक्ट। रेफरेंस एक्वाल्स' विधि को छाया देगा और उसके बाद उस विधि को अप्रचलित त्रुटि संदेश के साथ ObsoleteAttribute के साथ चिह्नित करेगा। इस तरह उपयोगकर्ता को चेतावनी दी जाएगी कि क्या उन्होंने यह गलती की है। –