لماذا VS وحدة قاعدة بيانات الاختبارات باستخدام TransactionScope وMSDTC تفشل؟

StackOverflow https://stackoverflow.com/questions/857103

سؤال

لدينا بعض الاختبارات وحدة تشغيل مقابل خادم SQL قاعدة بيانات 2000 باستخدام في الدرجة DatabaseTestFixture الذي يستخدم TransactionScope التي لا تلتزم، وبالتالي يتم إرجاع كافة التغييرات مرة أخرى. نشرت هذه الاختبارات في ضوء قاعدة بيانات محلية مع أي مشكلة.

ونحن بعد ذلك أشار وحدة الاختبارات على خادم قاعدة بيانات مشتركة وMSDTC الإعداد على الجهاز تشغيل وحدة الاختبارات وكل شيء على ما يرام مع هذا الجهاز.

وعلى الرغم من الآن لدينا إعداد الجهاز الجديد الذي سيقوم بتشغيل اختبار الوحدة أيضا ضد قاعدة بيانات مشتركة نفسها. اختبار وحدة لا تعمل على هذا الجهاز، وحصلنا على الخطأ التالي:

<اقتباس فقرة>   

وSystem.Transactions.TransactionException: لقد كانت الصفقة بالفعل ضمنا أو صراحة ارتكب أو أجهضت

وإعدادات MSDTC هي بالضبط نفس واحد أن يعمل ذلك قمنا بالمقارنة الشاشة من خلال الشاشة.

هل قام أي شخص من ذوي الخبرة شيئا مثل هذا من قبل؟ أو حصل أي مؤشرات على حيث أننا قد ننظر عن أدلة على ما قد يكون سبب ذلك؟

ولقد دققت إصدارات ويندوز وحزم الخدمات، خيارات جدار الحماية، خيارات MSDTC، إصدارات VS وحزم الخدمات.

هل كانت مفيدة؟

المحلول

وهذا يبدو أن لها صلة NUnit 2.5. قبل ذلك، التعليمة البرمجية التالية يعمل على ما يرام:

[SetUp]
public void SetUp() {
    this._testDataContext = new DataContext();
    this._transactionScope = new TransactionScope();
}

[TearDown]
public void TearDown() {
    if (_transactionScope != null)
    {
        this._transactionScope.Dispose();
    }
    if (_testDataContext != null)
    {
        _testDataContext.Dispose();
    }
}

ومع 2.5 في نطاق المعاملات يحتاج إلى instanciated مع TransactionScopeOption.RequiresNew. وأفترض أن إما لا يتم التخلص منها بشكل صحيح، أو أن NUnit لديه بعض المعاملات المحيطة قيد التشغيل عند الاختبارات يجري التشغيل. تغيير السطر الثاني على طريقة الإعداد ل

this._transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew);

ووينبغي لها أن تعمل بشكل صحيح.

إذا تمكن شخص ما للحصول على أفضل تفسير لماذا يحدث هذا، وأنا أحب أن أسمع ذلك.

نصائح أخرى

وربما يرتبط هذه المشكلة إلى إصدار Nunit الذي تستخدمه. كان لي بالضبط نفس المشكلة عند تشغيل وحدة 2.5 ولكن المشكلة يختفي في ظروف غامضة عندما تشغيل وحدة الاختبارات مع nunit 2.4.8 أو 2.2.

يرجى محاولة هذا أي اسمحوا لي أن أعرف ذلك زيادة نقاطي الشخصي سقيم!

والتحيات

وMAC

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top