2012-10-08 3 views
5

मैं अलग-अलग चिंताओं को दूर करने के लिए अपने डीबीकॉन्टेक्स्ट को सारणीबद्ध कर रहा हूं और अपना कोड यूनिट-टेस्टेबल बना सकता हूं। ऐसा करने के लिए मैं निम्नलिखित इंटरफेस के साथ आया हूँ।क्या यूनिट टेस्ट प्रोजेक्ट में ईएफ डीएल का संदर्भ होना चाहिए जब संदर्भ सारणित किया गया है

नीचे यह इंटरफ़ेस नामांकित असेंबली में होस्ट किया गया है AllInterfaces। नीचे दी गई घोषणा में आईडीबीसेट के कारण इस परियोजना में ईएफ डीएल का संदर्भ है।

public interface ISalesContext : IDisposable 
{ 
    IDbSet<Customer> Customers { get; } 
    IDbSet<Order> Orders { get; } 
    IDbSet<Product> Products { get; }  
}  

इस प्रकार मैं भी एक नकली डाटाबेस सेट बनाया है।

public class FakeDataSet<T> : IDbSet<T> where T: class, new() 
{ 
....... 
} 

तो मेरी ग्राहक वस्तु के लिए, इस नकली डाटासेट नीचे की तरह लग रहे।

public class FakeCustomerDbSet : FakeDbSet<Customer> 
    { 
    .............. 
    } 

तब मैं अपने नकली संदर्भ के रूप में निम्नानुसार बनाया।

public class FakeSalesContext : ISalesContext 
    { 
     public FakeSalesContext() 
     { 
      Customers = new FakeCustomerDbSet(); 

     } 

     public IDbSet<Customer> Customers { get; set; } 
     public IDbSet<Order> Orders{ get; private set; } 
     public IDbSet<Product> Products { get; private set; } 

     public void Dispose() 
     { 

     } 
    } 

उपरोक्त सभी वर्गों (FakeDataSet, FakeCustomerDbSet और FakeSalesContext) नकली वस्तुओं से संबंधित एक विधानसभा AllFakes में रहते हैं। मुझे ईएफ डीएल का संदर्भ जोड़ना पड़ा क्योंकि आईडीबीसेट इंटरफ़ेस को इन नकली कक्षाओं में भी संदर्भित किया गया है।

तब मेरे पास मेरी यूनिट टेस्ट प्रोजेक्ट है जहां मैं इकाई परीक्षण करने के लिए नकली वस्तुओं का उपयोग कर रहा हूं।

ISalesContext Context = new FakeSalesContext(); 
Context.Customers.Add(new Customer() { Id = 1, LastName = "Karen" }); 

समस्या यह है कि इस इकाई परीक्षण में मुझे इकाई फ्रेमवर्क डीएल के संदर्भ को जोड़ने की आवश्यकता है। अगर मैं ईएफ संदर्भ हटा देता हूं, तो मुझे निम्नलिखित संकलन त्रुटि मिलती है।

प्रकार 'System.Data.Entity.IDbSet`1' को असेंबली में परिभाषित किया गया है जिसका संदर्भ नहीं दिया गया है। आपको असेंबली 'EntityFramework, संस्करण = 4.4.0.0, संस्कृति = तटस्थ, PublicKeyToken = b77a5c561934e089' का संदर्भ जोड़ना होगा।

अगर मैं AllFakes विधानसभा से एफई dll संदर्भ निकालने के लिए, मैं त्रुटि निम्न मिलता है।

प्रकार या नाम स्थान का नाम 'IDbSet' नहीं पाया जा सका

यह मतलब है के लिए एफई dll के लिए एक संदर्भ जोड़ने के लिए (आप एक का उपयोग कर के निर्देश या एक विधानसभा संदर्भ याद आ रही हैं?) ये सभी असेंबली? मेरे लिए, क्योंकि मैंने अपने डीबी संदर्भ को सारणित किया है, इसकी आवश्यकता नहीं होनी चाहिए। इसे पूरा करने के तरीके पर कोई सुझाव?

उत्तर

2

मुझे विश्वास है कि आपको ईएफ डीएल के संदर्भ की आवश्यकता है। आपने अपना संदर्भ अमूर्त किया है लेकिन आपका अमूर्त अभी भी IDbSet इंटरफ़ेस का उपयोग कर रहा है जिसे EntityFramework.dll में परिभाषित किया गया है। FakeSalesContext IDbSet प्रकार के सार्वजनिक संपत्तियों को उजागर करता है, तो आप चीजों को संकलित नहीं करेगा क्योंकि संकलक पता नहीं होगा क्या IDbSet है EntityFramework.dll (जहां IDbSet परिभाषित किया गया है) के लिए एक संदर्भ न जोड़ें।

1

इस मामले में मैं इसके साथ एक मुद्दा नहीं दिख रहा है। जब तक आप केवल अपने DbContext कार्यान्वयन परीक्षण कर रहे हैं के रूप में, संदर्भ में ही केवल अपने संदर्भ वस्तु से निर्भरता समाधान के लिए है।

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