لماذا وضع سجل على داتاكونتيكست يسبب أوبجكتديسبوسيدكسيبتيون?

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

سؤال

هذه هي فئة الخدمة الخاصة بي:

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 ونيتستينغ هو حقا كين على تنظيف بعد تشغيل الاختبار.افتراضي لما يحدث هنا هو عند بناء تيستكلاس الخاص بك ، يتم تهيئة السياق الخاص بك.وبعد إجراء اختبار واحد.ريشاربر ينظف الموارد ، وبالتالي التخلص أيضا السياق الخاص بك.

استخدام تيستينيتياليز لإنشاء مثيل جديد من داتاكونتيكست الخاص بك ، وبالتالي عزل الاختبارات الخاصة بك من بعضها البعض

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