मेरे पास सिंगलटन क्लास है, ऐसा कुछ:

public class XConnector : IXConnector
        {

            private static readonly Lazy<XConnector> instance = 
                    new Lazy<XConnector>(() => new XConnector());

            public static XConnector Instance => instance.Value;

            private XConnector()
            {
            }

            public async Task<XConnector> GetData(XConnector con)
            {
            }
      }

मैं इस कक्षा को NSubstitute के साथ कैसे उपहास कर सकता हूँ?

दूसरी तरफ: मुझे ऐसा कुछ चाहिए

var target = Substitute.For<IXConnector>();

जब मैं इस कोड को डीबग करता हूं तो यह एक त्वरित घड़ी है

यहां छवि विवरण दर्ज करें किसी भी मदद का स्वागत है।

0
user5447154 20 अप्रैल 2017, 11:09
1
और समस्या क्या है? Substitute.For<IXConnector>(); को पूरी तरह से काम करना चाहिए अगर IXConnector एक इंटरफ़ेस है (जो मुझे लगता है)।
 – 
HimBromBeere
20 अप्रैल 2017, 11:12
आप मार्क सीमैन के परिवेश संदर्भ पैटर्न का उपयोग कर सकते हैं। यह आपको सिंगलटन के इरादे को प्रदान करते हुए एक उदाहरण को इंजेक्ट करने की अनुमति देगा।
 – 
David Osborne
20 अप्रैल 2017, 11:15
1
CrmConnector, XConnector पर कैसे निर्भर करता है?
 – 
HimBromBeere
20 अप्रैल 2017, 11:55
1
वैसे भी मुझे लगता है कि __target-सदस्य वह नहीं है जो आपको लगता है कि यह है (हालांकि आंतरिक कार्यान्वयन पर निश्चित नहीं है)। बस आपके पास पहले से मौजूद var target = Substitute.For<IXConnector>(); कोड के साथ काम करें। यह आपको आपके इंटरफ़ेस का प्रॉक्सी-इंस्टेंस देगा। हालांकि यह आपके सिंगलटन का कुछ भी नहीं जानता है। शायद आपको दिखाना चाहिए कि आप नकली का उपयोग कैसे कर रहे हैं।
 – 
HimBromBeere
20 अप्रैल 2017, 11:59
1
इसमें नहीं सिंगलटन है, बस एक इंटरफ़ेस का एक उदाहरण शामिल है। तो दिखाएँ कि आप target के साथ क्या कर रहे हैं।
 – 
HimBromBeere
20 अप्रैल 2017, 13:09

1 उत्तर

सबसे बढ़िया उत्तर

मुझे परिवेश संदर्भ पैटर्न के कार्यान्वयन को याद नहीं है, मेरे पास किताब नहीं है। हालांकि, यह कुछ ऐसा दिखाई देगा:

public class XConnector : IXConnector
{
    private static IXConnector _instance = new XConnector();

    private XConnector()
    {
    }

    public static IXConnector Current
    { 
       get
       {
           return _instance;
       }
       set 
       {
           // Think about thread-safety
           // Check for null?
           _instance = value;
       }
    }

    public async Task<XConnector> GetData(XConnector con)
    {
    }
}

तब आपका परीक्षण यह कर सकता है:

XConnector.Current = Substitute.For<IXConnector>();

आपका कार्यात्मक कोड यह कर सकता है, डिफ़ॉल्ट उदाहरण या नकली के साथ काम करना:

XConnector.Current.GetData(...);
3
David Osborne 20 अप्रैल 2017, 13:31
आपने मुझे सही रास्ते पर रखा। लेकिन मुझे नहीं लगता कि मेरे पास मेरा जवाब है। क्योंकि उदाहरण केवल पढ़ने के लिए है
 – 
user5447154
20 अप्रैल 2017, 14:30
6
क्या यह जरूरी है? यदि आप इंस्टेंस को नकली से बदलना चाहते हैं, तो आपको इसे सेट करने के लिए किसी तरह की आवश्यकता होगी और वर्तमान डिज़ाइन एक कंस्ट्रक्टर को नियंत्रित करता है।
 – 
David Osborne
20 अप्रैल 2017, 14:46