6

ईएफ 4 में लेनदेन को वापस लाने के बारे में मेरे शोध में, ऐसा लगता है कि हर कोई this blog post को संदर्भित करता है या एक समान स्पष्टीकरण प्रदान करता है। मेरे परिदृश्य में, मैं इसे यूनिट परीक्षण परिदृश्य में करना चाहता हूं, जहां मैं डेटाबेस में डेटा अपडेट करने से रोकने के लिए अपने यूनिट परीक्षण संदर्भ में जो कुछ भी करता हूं, वह रोलबैक करना चाहता हूं (हाँ, हम काउंटर बढ़ाएंगे लेकिन यह ठीक है)। ऐसा करने के लिए, क्या निम्न योजना का पालन करना सबसे अच्छा है? क्या मुझे इस बारे में कुछ अवधारणा या कुछ और प्रमुख याद आ रहा है (मेरे SetupMyTest और PerformMyTest कार्यों के अलावा वास्तव में इस तरह से मौजूद नहीं होंगे)?यूनिट टेस्ट टीयरडाउन के लिए ईएफ 4 में रोलबैक कैसे करें?

[TestMethod] 
public void Foo 
{ 
    using (var ts = new TransactionScope()) 
    { 
    // Arrange 
    SetupMyTest(context); 

    // Act 
    PerformMyTest(context); 
    var numberOfChanges = context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave); 
    // if there's an issue, chances are that an exception has been thrown by now. 

    // Assert 
    Assert.IsTrue(numberOfChanges > 0, "Failed to _____"); 

    // transaction will rollback because we do not ever call Complete on it 
    } 
} 
+0

हम्म, ईएफ 4 में, स्पष्ट रूप से सेवचेंज (झूठा) अधिभार को हटा दिया गया है। ऐसा लगता है कि SaveChanges (SaveOptions.AcceptAllChangesAfterSave) इसके लिए प्रतिस्थापन है इसलिए मैं अपने मूल प्रश्न में यह अद्यतन कर रहा हूं। – Jaxidian

उत्तर

10

हम इसके लिए लेनदेनस्कोप का उपयोग करते हैं।

private TransactionScope transScope; 

    #region Additional test attributes 
    // 
    // Use TestInitialize to run code before running each test 
    [TestInitialize()] 
    public void MyTestInitialize() 
    { 
     transScope = new TransactionScope(); 
    } 

    // Use TestCleanup to run code after each test has run 
    [TestCleanup()] 
    public void MyTestCleanup() 
    { 
     transScope.Dispose(); 
    } 

यह किसी भी परीक्षण में किए गए किसी भी बदलाव को रोलबैक करेगा।

+0

क्या आपको परीक्षण लिखने/डिबग करने के दौरान लटकते लेनदेन के साथ समस्याएं हैं? मैं इसे साझा डेटाबेस के खिलाफ ऐसा करना पसंद करूंगा लेकिन मैं ऐसा नहीं करना चाहता हूं जहां हम लगातार लटकते लेनदेन से निपट रहे हों। – Jaxidian

+0

यदि आप कोई निपटान नहीं करते हैं तो आपको लटकते लेनदेन मिलते हैं। निपटान के बिना लेनदेन समय सीमा तक लटका होगा। –

+0

कोई भी मौका यह है कि आप अपना कोड नमूना अपडेट कर सकते हैं यह दिखाने के लिए कि मूल परीक्षण कैसा दिखता है? क्या 'SaveChanges (SaveOptions.AcceptAllChangesAfterSave)' इस बारे में जाने का सही तरीका है या नहीं? – Jaxidian

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