لماذا وضع سجل على داتاكونتيكست يسبب أوبجكتديسبوسيدكسيبتيون?
-
15-11-2019 - |
سؤال
هذه هي فئة الخدمة الخاصة بي:
public class MyService
{
private readonly MyDataContext _db;
public MyService()
{
_db = new MyDataContext(GetConnectionString());
#if DEBUG
_db.Log = Console.Error;
#endif
}
public void Get(int id)
{
return from item in _db.Items
where item.Id == id
select item;
}
}
هذا هو صفي الاختبار
[TestClass]
public class MyServiceTest
{
private MyService _service = new MyService();
[TestMethod]
public void CanGetSomething()
{
var something = _service.Get(1).ToList();
// Asserts
}
[TestMethod]
public void CanGetSomethingElse()
{
var somethingElse = _service.Get(2).ToList();
// Commented out everything else.
}
}
تشغيل CanGetSomething
و CanGetSomethingElse
بشكل منفصل باستخدام ريشاربر 5 اختبار عداء يعمل بشكل جيد ، كل من الاختبارات تمر.ومع ذلك ، في محاولة لتشغيل الاختبارات على التوالي عن طريق تشغيل الطبقة بأكملها يسبب الطريقة الأولى لتمرير والطريقة الثانية لرمي الاستثناء
النظام.أوبجكتديسبوسيدكسيبتيون:لا يمكن الكتابة إلى كاتب نص مغلق.
لا يبدو أنه يهم الطريقة التي أسميها في الاختبار الثاني ، أي شيء يدعو _db
سوف يسبب الخطأ.التعليق _db.Log = Console.Error
يتخلص من الاستثناء ، وسوف تعمل بشكل جيد.
أود أن أكون قادرا على تسجيل الخطأ وتشغيل فئة كاملة من الاختبارات في وقت واحد ، ولكن لا أستطيع معرفة لماذا يتصرف مثل هذا.
أي أفكار?
المحلول
لا تشارك أعضاء فئة الاختبار الخاصة بك!لا يعرفون ريشاربر ، ولكن فس 2010 ونيتستينغ هو حقا كين على تنظيف بعد تشغيل الاختبار.افتراضي لما يحدث هنا هو عند بناء تيستكلاس الخاص بك ، يتم تهيئة السياق الخاص بك.وبعد إجراء اختبار واحد.ريشاربر ينظف الموارد ، وبالتالي التخلص أيضا السياق الخاص بك.
استخدام تيستينيتياليز لإنشاء مثيل جديد من داتاكونتيكست الخاص بك ، وبالتالي عزل الاختبارات الخاصة بك من بعضها البعض