为什么设置“在数据上下文上登录”会导致 ObjectDisposedException

本文关键字:ObjectDisposedException 登录 设置 数据 上下文 为什么 | 更新日期: 2023-09-27 17:56:43

这是我的服务类:

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.
  }
}

使用 ReSharper 5 测试运行器分别运行CanGetSomethingCanGetSomethingElse工作正常,两个测试都通过。但是,尝试通过运行整个类来连续运行测试会导致第一个方法通过,第二个方法引发异常

System.ObjectDisposedException:无法写入已关闭的 TextWriter。

我在第二个测试中调用什么方法似乎并不重要,任何调用_db的方法都会导致错误。注释掉_db.Log = Console.Error可以摆脱异常,它将正常工作。

我希望能够记录错误并一次运行一整类测试,但我无法弄清楚为什么它会这样。

有什么想法吗?

为什么设置“在数据上下文上登录”会导致 ObjectDisposedException

不要分享测试类的成员!不知道锐化器,但VS 2010 UnitTest真的很热衷于在运行测试后进行清理。我对这里发生的事情的假设是,在构造TestClass时,您的上下文正在初始化。并在运行单个测试后。Resharper 会清理资源,因此也会处理您的上下文。

使用 TestInitialize 创建 dataContext 的新实例,从而将测试彼此隔离

相关文章:
  • 没有找到相关文章