2012-10-01 8 views
8

मैं कुछ यूनिट परीक्षणों में माइक्रोसॉफ्ट फॉक्स का उपयोग कर रहा हूं जिन पर मैं काम कर रहा हूं। मेरे इंटरफेस इस तरह दिखता है:कोई एक स्टब का संदर्भ कैसे देता है जिसमें माइक्रोसॉफ्ट फॉक्स का उपयोग करके खुद का सामान्य पैरामीटर होता है?

interface ISecuredItem<TChildType> where TChildType : class, ISecuredItem<TChildType> 
{ 
    SecurityDescriptor Descriptor { get; } 
    IEnumerable<TChildType> Children { get; } 
} 

इस का एक विशिष्ट कार्यान्वयन लगता है:

class RegistryKey : ISecuredItem<RegistryKey> 
{ 
    public SecurityDescriptor Descriptor { get; private set; } 
    public IEnumerable<RegistryKey> Children { get; } 
} 

मैं माइक्रोसॉफ्ट गलत के साथ इस इंटरफ़ेस का उपयोग करना चाहते हैं, और यह मेरे लिए एक ठूंठ उत्पन्न की है। समस्या यह है कि फॉर्म फक्स का उपयोग StubInterfaceNameHere<> है, इसलिए उपर्युक्त उदाहरण में आप StubISecuredItem<StubISecuredItem<StubISecuredItem<StubISecuredItem....

ऐसा कुछ करने की कोशिश कर रहे हैं? यदि हां, तो मैं इस तरह नकली का उपयोग कैसे करूं?

उत्तर

5

कुछ प्रयोगों के बाद मुझे एक कामकाजी समाधान मिला हालांकि यह सबसे सुरुचिपूर्ण नहीं है।

इससे आपके नियमित कोड है:

var securedItemStub = new StubISecuredItem<StubImplemtation> 
          { 
           ChildrenGet =() => new List<StubImplemtation>(), 
           DescriptorGet =() => new SecurityDescriptor() 
          }; 

var children = securedItemStub.ChildrenGet(); 
var descriptor = securedItemStub.DescriptorGet(); 
:

public interface ISecuredItem<TChildType> 
    where TChildType : ISecuredItem<TChildType> 
{ 
    SecurityDescriptor Descriptor { get; } 
    IEnumerable<TChildType> Children { get; } 
} 

अपने परीक्षण परियोजना में आप अपने इकाई परीक्षण में

public interface StubImplemtation : ISecuredItem<StubImplemtation> { } 

फिर एक StubImplemtation इंटरफ़ेस बनाने आप निम्न कर सकते

आप पूरे StubImplementation को छोड़ सकते हैं और RegistryKey का उपयोग कर सकते हैं यदि यह n है ओ समस्या

+0

यह निश्चित रूप से चाल करेगा, लेकिन इसे परीक्षण परियोजना में स्टब/नकली के रूप में इंटरफ़ेस को कार्यान्वित करने की आवश्यकता है। मुझे नहीं पता कि यह विचार है ... –

+0

मैं कल्पना कर सकता हूं कि यह विचार नहीं है .. लेकिन मुझे कोई अन्य समाधान नहीं दिखाई दे रहा था। जब आप स्रोत कोड को देखते हैं जो फॉक्स फ्रेमवर्क उत्पन्न करता है, तो सामान्य पैरामीटर StecISecuredItem की नहीं, ISecuredItem प्रकार का है। मैं लगभग कहूंगा कि ढांचे में एक बग है। और परीक्षण प्रोजेक्ट में कार्यान्वयन में सभी विधियों को एक NotImplementedException फेंक सकता है, इसलिए इसे बनाने के लिए अधिक समय नहीं लगाना चाहिए। –

+0

मैं नहीं, मैं पूरी तरह से सहमत हूं। उत्तर समाधान जो स्वचालित रूप से मेरे दिमाग में आया वह वह है जिसे आपने बताया था। –