2013-05-22 8 views
7

मैं इस समय अपने आप को खा रहा हूं। यह एंटिटी फ्रेमवर्क की तरह परीक्षण योग्य नहीं है। मैंने बहुत सारे पदों और धागे पढ़े हैं जहां वे काम की इकाई या moq या repo पैटर्न का उपयोग करते हैं।परीक्षण: संदर्भ बनाने से इकाई फ्रेमवर्क

मैं एक चरण में हूं कि मैं अपने आवेदन के अपने आर्किटेक्चर का बहुत कुछ नहीं बदल सकता। एप्लिकेशन इस पल में पूरी तरह से काम करता है लेकिन यह सुनिश्चित करने के लिए कि मुझे उच्च कोड कवरेज होना चाहिए, इसलिए इसका परीक्षण करना है।

परीक्षण के लिए, मैं 'नकली संदर्भ' विधि का उपयोग कर रहा हूं जहां मैं नकली एक का उपयोग मॉकिंग के लिए कर सकता हूं और डेटाबेस के कनेक्शन के लिए असली एक का उपयोग कर सकता हूं।

मैंने इसे एक उदाहरण के रूप में उपयोग किया। http://romiller.com/2010/09/07/ef-ctp4-tips-tricks-testing-with-fake-dbcontext/

वहां, आप देख सकते हैं कि संदर्भ विभाजित है और एक इंटरफ़ेस के रूप में उपयोग किया जाता है। पसंद:

public interface IEmployeeContext 
    { 
     IDbSet Department Departments { get; } 
     IDbSet Employee Employees { get; } 
     int SaveChanges(); 
    } 

    public class EmployeeContext : DbContext, IEmployeeContext 
    { 
     public IDbSet Department Departments { get; set; } 
     public IDbSet Employee Employees { get; set; } 
    } 

    public class FakeEmployeeContext : IEmployeeContext 
    { 
     public FakeEmployeeContext() 
     { 
      this.Departments = new FakeDepartmentSet(); 
      this.Employees = new FakeEmployeeSet(); 
     } 

     public IDbSet Department Departments { get; private set; } 

     public IDbSet Employee Employees { get; private set; } 

     public int SaveChanges() 
     { 
     return 0; 
     } 
    } 

    } 

तो टेसिंग और सबकुछ काम करता है। EntityState.Modified

क्योंकि यह एक अंतरफलक मुझे लगता है कि जोड़ने के लिए इंटरफ़ेस संदर्भ में की जरूरत का उपयोग करता है: केवल एक चीज मैं करना नहीं कर पा रहे, उस में .State के साथ एक नियंत्रक का परीक्षण मैं जहां जाँच यह बदल गया है कि क्या की तरह है । और एक नया बनाएँ। या क्या मैं कुछ न कुछ भूल रहा हूं ? यह संभवतः उस संदर्भ में पूरी विधि बनाने का इरादा नहीं है .. मैं इसे

उत्तर

4

क्या आपने इसके बजाय एकीकरण परीक्षण करने पर विचार किया है?

आप वास्तविक ईएफ डीबीसीएन्टेक्स्ट, के खिलाफ एकीकरण परीक्षण कर सकते हैं बस इकाई-परीक्षण परियोजना के App.config में एक अलग कनेक्शन स्ट्रिंग दें।

this और इसके सभी उत्तर पढ़ें।

+0

तो मूल रूप से मैं दृश्य स्टूडियो के असली नकली डेटाबेस के खिलाफ परीक्षण करूंगा? – Ibsonic

+0

एकीकरण परीक्षण यह है! धन्यवाद @ लिएल ने मुझे बहुत मदद की। मैंने अपने संदर्भों को वापस कर दिया .. इसकी सुंदरता नकली संदर्भ बनाने के बजाय पूरी तरह से पृथक है जो केवल अनियंत्रित कोड है। – Ibsonic

1

पर काम करने के लिए कैसे प्रबंधित कर सकता हूं बस संदर्भ इंटरफ़ेस में संपत्ति जोड़ें। बीटीडब्ल्यू, आपको FakeContext की आवश्यकता नहीं है, आप केवल इंटरफ़ेस का एक मॉक बना सकते हैं, और अपने नकली डेटासेट को वापस करने के लिए गुणों को सेट कर सकते हैं। इस तरह, आप इंटरफ़ेस में कई विधियों और गुणों को जोड़/हटा सकते हैं, जैसा आपको चाहिए।

+0

जब भी मैं अपने इंटरफ़ेस में उस संपत्ति को जोड़ता हूं, मुझे इसे संदर्भ में परिभाषित करने की भी आवश्यकता होती है जो इंटरफ़ेस के विरासत में हैं .. जिसका अर्थ है कि मुझे फिर से विधि लिखनी है? – Ibsonic

1

@Liel के लिए धन्यवाद मैं इस काम को पाने में कामयाब रहा। एकीकरण परीक्षण के लिए 'टेस्ट' डीबी बनाना .. मेरी राय में अनावश्यक कोड का उपयोग करने के बजाय। मेरी परियोजना अब इस विधि का उपयोग करके पूरी तरह से स्वतंत्र है।

[TestInitialize] 
public void InitializBeforeTests() 
{ 
    AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "")); 
    Database.SetInitializer<DataAccess.DataContext>(new DropCreateDatabaseAlways<DataAccess.DataContext>()); 
    var context = new DataAccess.DataContext(); 
    context.Database.Initialize(force: true); 
} 

और APP.Config में मेरी परीक्षण प्रोजेक्ट में एक नई कनेक्शन स्ट्रिंग बनाना।

आपके उत्तरों के लिए धन्यवाद!

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