2012-03-23 13 views
6

मैं चेतावनी पूरी तरह से अक्षम नहीं करना चाहता, बस जब यह एक कथन कथन में है।असर वक्तव्यों का उपयोग करते समय संभावित शून्य संदर्भ अपवाद चेतावनियों को अनदेखा करने का कोई तरीका?

इसलिए उदाहरण के लिए अगर मैं निम्नांकित दो पंक्तियों

var someObject = GetObject(); 
Assert.IsNotNull(someObject, "someObject should not be null"); 
Assert.AreEqual(expectedValue, someObject.SomeProperty); 

मैं someObject.SomeProperty पर दूसरी पंक्ति पर संभव अशक्त संदर्भ चेतावनी मिल जाएगा है। क्या यह किसी निश्चित कॉल के भीतर चेतावनी को अक्षम करना संभव है, जैसे Assert.AreEqual?

चूंकि यह कई यूनिट परीक्षणों के साथ एक मुद्दा है, इसलिए मैं रीशेपर अक्षम कोड के साथ परीक्षण कूड़े नहीं करना चाहता हूं।

अभी ही एकमात्र विकल्प मैं के बारे में सोच सकते हैं कि हर Assert.IsNotNull कॉल को बदलने के लिए

var someObject = GetObject(); 
if(someObject == null) 
{ 
    Assert.Fail("someObject is null"); 
    return; 
} 

होने के लिए हालांकि इस तरह की पहली जगह में Assert.IsNotNull होने के उद्देश्य को हराने के लिए लगता है। बस एक बेहतर तरीका है कि क्या सोच रहा है।

+0

संबंधित: http://stackoverflow.com/questions/4393456/resharper-how-to-remove-possible-system-nullreferenceexception-warning – JYelton

+0

आप कर सकते हैं एक पूर्ण उदाहरण पोस्ट करें? मैं इसे पुन: पेश नहीं कर सकता; NUnit की दावा लाइब्रेरी का उपयोग करते समय Assert.IsNotNull के अतिरिक्त चेतावनी को हटा देता है - और चाहे वह किसी परीक्षण में है या इसका कोई प्रभाव नहीं है। –

+0

@ जेम्स वर्ल्ड, मैं एमबीयूनीट का उपयोग कर रहा हूं, यकीन नहीं कि इससे कोई फर्क पड़ता है। मेरे द्वारा पोस्ट किया गया कोड MBUnit 2.4.2 और ReSharper 6.1 का उपयोग करके चेतावनी देता है।मुझे पता है कि इससे कोई फर्क नहीं पड़ता कि यह परीक्षण में है या नहीं, लेकिन मैं केवल परीक्षण कक्षाओं में इसे अक्षम करने के लिए चिंतित हूं। हर जगह यह सक्षम होना चाहिए। – Brandon

उत्तर

0

यदि मुझे गलत नहीं है, तो आपकी समस्या यह है कि पुनर्विक्रेता चेतावनी देता है जब शून्य को फ़ोरैच ऑब्जेक्ट की जांच नहीं की जाती है। आप पुनर्विक्रय नियमों को संशोधित कर सकते हैं न कि परीक्षण कक्षाओं में शून्य चेतावनियां देना। Here परीक्षण विधियों के लिए रीशेपर नामकरण शैली बदलने के बारे में एक लिंक है।

+0

जब आप प्रत्येक शब्द को एक शब्द के रूप में लिखना शुरू करते हैं तो आप प्रोग्राम को बहुत अधिक जानते हैं। :) क्या आप यह कैसे कर सकते हैं इसके बारे में कदम प्रदान कर सकते हैं? मैं रिसर्चर को कैसे बता सकता हूं कि टेस्ट क्लास पर विचार करना क्या है? – Brandon

+0

@ ब्रैंडन आपने मुझे मुस्कुराया :) कृपया एक नज़र डालें; http://atombrenner.blogspot.com/2010/07/how-to-change-resharper-naming-style.html – daryal

+0

-1 मुझे लगता है कि आप गलत हैं। चेतावनी की उपस्थिति कक्षाओं के परीक्षण के लिए विशिष्ट नहीं है। –

0

MBUnit के बजाय NUnit का उपयोग करें। NUnit के Assert.IsNotNull() को कार्यान्वित करने के रूप में उठाया गया है जबकि एमबीयूनीट नहीं है।

+0

बेशक यह शायद आपके मामले में बहुत व्यावहारिक नहीं है। –

+1

Assert के लिए गारंटी कैसे दें। क्या (परिणाम, Is.Not.Null)? – labilbe

1

मैं आप का उपयोग विशिष्ट पुस्तकालय पता नहीं है, लेकिन मैं

Assert.IsTrue(someObject != null); 

की तरह कुछ की कोशिश करता हूँ या पूर्णता के लिए,,

Assert.IsNotNull(someObject, "someObject must not be null"); 
Assert.IsNotNull(someObject.SomeProperty, "SomeProperty must not be null either"); 
Assert.SomethingElse(...); 
+0

उत्तर के लिए धन्यवाद, लेकिन समस्या अभी भी मौजूद है। यहां तक ​​कि यदि मैं ऑब्जेक्ट पर जोर देता हूं और संपत्ति शून्य नहीं है, तो चेतावनियां परवाह नहीं करते हैं और चेतावनी देते हैं। अगर मैं 'object == null' करता हूं और विधि से बाहर निकलता हूं तो चेतावनियां केवल तभी चली जाएंगी। – Brandon

+0

@ ब्रैंडन चेतावनी के बावजूद जिज्ञासा से बाहर, परीक्षण पास हो जाते हैं और असफल होने की उम्मीद करते हैं? – Alex

+0

हां। यह एक नाटकीय मुद्दा है। मुझे सिर्फ चेतावनी के गुच्छा से भरा समाधान व्यापक निरीक्षण पसंद नहीं है जो वास्तव में चेतावनी नहीं देनी चाहिए। यह वास्तविक कोड या परीक्षण या कुछ भी प्रभावित नहीं करता है। – Brandon

0

आप आर # बाहरी उपयोग कर सकते हैं चेतावनियों को दबाने के लिए टिप्पणियां (http://grahamrhay.wordpress.com/2011/01/09/external-annotations/ देखें)।

एमबीयूनीट/गैलियो का कौन सा संस्करण आप उपयोग कर रहे हैं?

1

अपनी परियोजना के लिए इस जोड़ें:

public static class AssertionsExtensions 
{ 
    [NotNull] 
    public static TSubject ShouldNotBeNull<TSubject>([CanBeNull] this TSubject source, 
     [CanBeNull] string because = "", [CanBeNull] [ItemCanBeNull] params object[] reasonArgs) 
    { 
     source.Should().NotBeNull(because, reasonArgs); 

     // ReSharper disable once AssignNullToNotNullAttribute 
     return source; 
    } 
} 

फिर इस तरह उपयोग, उदाहरण के लिए:

  // Assert 
      succeeded.Should().Be(true, "<USB loopback cable must be connected and COM port must be correct.>"); 
      DeviceStatus deviceStatusNotNull = testRunner.Result.ShouldNotBeNull(); 
      deviceStatusNotNull.DeviceAddress.Should().Be(deviceAddress); 
      deviceStatusNotNull.IsInNetwork.Should().Be(true); 
0

आप निष्पादन इंगित करने के लिए उपयोग कर सकते हैं ContractAnnotations करना बंद कर दे पैरामीटर रिक्त है। jetbrains contract annotations देखें। नमूना वर्ग:

public static class FluentExtensions 
{ 
     //see: https://www.jetbrains.com/help/resharper/2017.3/Contract_Annotations.html 
     [ContractAnnotation("null => stop")] 
     public static void ShouldNotBeNull(this object objToTest) 
     { 
      objToTest.Should().NotBeNull(); 
     } 

} 

उपयोग:

doc.ShouldNotBeNull(); 
doc.Content.ShouldNotBeNull(); 
संबंधित मुद्दे

 संबंधित मुद्दे