2012-07-03 11 views
19

मुझे लगता है कि Rails' और Django's परीक्षण दृष्टिकोण के बारे में मुझे लगता है कि प्रत्येक परीक्षण चलाने से पहले डेटाबेस सेट अप करने के लिए जुड़नार का उपयोग करने का उनका समर्थन है।फिक्स्चर के साथ परीक्षण इकाई फ्रेमवर्क

अतीत में, मैंने अपने कोड का परीक्षण करने के लिए एक नकली भंडार के साथ सख्त इकाई परीक्षणों का उपयोग किया है, लेकिन मुझे कुछ ऐसा करना अच्छा लगेगा जो एकीकृत परीक्षण करने के लिए उपर्युक्त परीक्षण दृष्टिकोण के रूप में उपयोग करना आसान है ।

मैंने कोड-प्रथम और ईएफ 5 के साथ इस प्रकार के समर्थन की कुछ बात सुनी है, लेकिन मुझे नहीं पता कि यह रेल और डैंजो प्रदान करने के स्तर पर बढ़ता है या नहीं।

निश्चित रूप से वहां कुछ तुलनीय है। किसी भी जानकारी की सराहना की जाएगी!

+0

मुझे पता था कि @ LadislavMnrka इस सब पर होगा। :) –

+0

मेरा मानना ​​है कि [ऑटोफिक्चर] (https://github.com/AutoFixture/AutoFixture) उस समाधान से बहुत दूर है जिसे आप ढूंढ रहे हैं, लेकिन यह सबसे नज़दीकी चीज है जिसे मैं ईएफ के लिए फिक्स्चर स्वचालित करने के लिए पा सकता हूं। –

+0

बिल्कुल नहीं, ईएफ डीबी के पुनर्मूल्यांकन की अनुमति देता है (इसे फिर से बनाता है, संभवतः डेटा जोड़ता है), लेकिन यह किसी भी परीक्षण ढांचे से जुड़ा नहीं है, जब आप विजुअल स्टूडियो में एप्लिकेशन को पुनरारंभ करते हैं तो हर चीज तब होती है। हालांकि, यदि आप –

उत्तर

12

ईएफ 5 नई अवधारणा में पेश किया गया है, जिसे माइग्रेशन कहा जाता है। आप शायद रेल या Django अनुप्रयोगों में कुछ समान उपयोग करने के लिए प्रयोग किया जाता है।

माइग्रेशन एक कक्षा है, जिसमें डीबी के संस्करण को अपग्रेड/डाउनग्रेड करने के कई फ़ंक्शन हैं।

public partial class VoteTime : DbMigration 
{ 
    public override void Up() 
    { 
     AddColumn("Votes", "Time", c => c.DateTime(nullable:false, defaultValue:DateTime.UtcNow)); 
    } 

    public override void Down() 
    { 
     DropColumn("Votes", "Time"); 
    } 
} 

तुम भी, कोड पहले दृष्टिकोण काम करने के लिए अनुमति देने के लिए सेटअप DbContext और DbMigrationsConfiguration विन्यास वर्गों के लिए है।

परीक्षण प्रयोजनों आप को पेश करने की जरूरत है के लिए, TestDatabaseInitilizer

public class TestDatabaseInitilizer : DropCreateDatabaseAlways<DbContext> 
{ 

} 

यह इकाई परीक्षण के लिए परीक्षण डेटाबेस के प्रारंभ के लिए जिम्मेदार होगा।

अंत में, आपको संदर्भ सेट अप करने के लिए अपना परीक्षण कोड डिज़ाइन करना चाहिए।

public class SomeRepositoryTests 
{ 
    private DbContext _context; 

    [SetUp] 
    public void Setup() 
    { 
     Database.SetInitializer(new TestDatabaseInitilizer()); 
     _context = new DbContext("TestContext"); 
     _repository = new SomeRepository(_context); 
    } 

    [Test] 
    public void should_return_some_entities() 
    { 
     Assert.That(_repository.Get(), Is.Not.Null); 
    } 
} 

सेटअप कोड को आवश्यक होने पर बेस क्लास में स्थानांतरित किया जा सकता है।

+0

कई तालिकाओं वाले डेटाबेस और लंबे प्रवासन इतिहास के साथ, डेटाबेस छोड़ना और प्रत्येक टेस्ट क्लास (या यहां तक ​​कि विधि) के लिए इसे पुन: प्रयास करना आपके परीक्षण समय में एक बड़ा ओवरहेड जोड़ सकता है। –

6

मैंने एंटिटी फ्रेमवर्क के साथ एक एप्लीकेशन विकसित किया है जिसमें 600 से अधिक स्वचालित एकीकरण परीक्षण हैं। इस प्रक्रिया मैं प्रयोग किया जाता है:

  • इकाई की रूपरेखा कोड पहले माइग्रेशन सिर्फ डेटाबेस संरचना (टेबल, अनुक्रमित, आदि) स्थापित करने के लिए। मैं बीज डेटा में माइग्रेशन का उपयोग नहीं करता हूं।

  • एसक्यूएल स्क्रिप्ट जो विशिष्ट, जाने-माने राज्यों में डेटाबेस सेट करते हैं। उदाहरण के लिए, ASP.NET सदस्यता उपयोगकर्ताओं को सम्मिलित करने के लिए एक स्क्रिप्ट; दूसरा जो सबसे प्रासंगिक तालिकाओं के लिए नमूना डेटा सेट करता है; और दूसरों को अधिक विशिष्ट परिदृश्यों के लिए। स्क्रिप्ट आमतौर पर उचित तालिकाओं से रिकॉर्ड्स हटाते हैं और संबंधों के संघर्ष से बचने के लिए उपयुक्त क्रम में उन्हें फिर से सम्मिलित करते हैं। स्क्रिप्ट स्टूडियो प्रोजेक्ट में एम्बेड किए गए संसाधनों के रूप में शामिल हैं।

  • एक सहायक वर्ग जो संसाधनों से अपने नाम से एक स्क्रिप्ट प्राप्त कर सकता है और इसे "गो" के साथ बैचिंग कमांड सहित डेटाबेस के विरुद्ध निष्पादित कर सकता है। इसके लिए ConnectionContext.ExecuteNonQuery का उपयोग किया जा सकता है।

  • पूरे परीक्षण सूट की शुरुआत में, मैं स्क्रिप्ट निष्पादित करता हूं जो उपयोगकर्ताओं, अनुमतियों और अन्य सामान्य पर्यावरण कॉन्फ़िगरेशन सेट करता है।

  • प्रत्येक परीक्षण विधि से पहले, मैं एक या अधिक स्क्रिप्ट निष्पादित करता हूं, उचित रूप से, परीक्षणों द्वारा आवश्यक संदर्भ में डेटाबेस सेट करने के लिए। उदाहरण के लिए, सीआरयूडी परीक्षणों की एक श्रृंखला से पहले जो डेटा को पढ़, सम्मिलित, अद्यतन और हटाते हैं, मैं एक स्क्रिप्ट चलाता हूं जो टेस्ट डेटा के साथ उपयुक्त तालिका को बीज करता है।

  • मैं परीक्षण मामलों को लिखता हूं मानते हैं कि डेटाबेस एक विशिष्ट संदर्भ में सेट है। उदाहरण के लिए, एक अद्यतन ऑपरेशन का परीक्षण किसी ज्ञात कुंजी के साथ रिकॉर्ड पुनर्प्राप्त करने का प्रयास करेगा, इसे अपडेट करें और यह जांचने के लिए फिर से पढ़ें कि यह डेटाबेस में अपडेट किया गया था या नहीं।

हालांकि एसक्यूएल स्क्रिप्ट लिखने और पढ़ने जुड़नार रेल के रूप में के रूप में आसान नहीं हैं, वे बहुत तेजी से कर रहे हैं और जरूरत हेरफेर के किसी भी प्रकार (उदाहरण के लिए हटाएँ, सम्मिलित करें, अद्यतन, संग्रहित प्रक्रियाओं पर अमल) कर सकते हैं।

यह तकनीक 50 डेटाबेस टेबल और बहुत ही जटिल व्यावसायिक नियमों और प्रक्रियाओं वाली परियोजना में अच्छी तरह साबित हुई थी। यह परीक्षणों को सरल और सुसंगत रखता है।

+0

अनुभव के लिए धन्यवाद – nXqd

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