为什么在 DataContext 上设置 Log 会导致 ObjectDisposeException?
-
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
单独使用 ReSharper 5 测试运行器工作正常,两个测试都通过。但是,尝试通过运行整个类来连续运行测试会导致第一个方法通过,而第二个方法抛出异常
系统对象处置异常:无法写入已关闭的 TextWriter。
我在第二次测试中调用什么方法似乎并不重要,任何调用 _db
会导致错误。评论出来 _db.Log = Console.Error
摆脱异常,它会正常工作。
我希望能够记录错误并立即运行一整类测试,但我不明白为什么它会这样。
有任何想法吗?
解决方案
不要分享您的测试班成员!不知道 resharper,但 VS 2010 UnitTesting 确实热衷于运行测试后的清理工作。我对这里发生的情况的假设是在构造 TestClass 时,您的上下文正在初始化。在运行一次测试之后。Resharper 会清理资源,因此也会处理您的上下文。
使用 TestInitialize 创建 dataContext 的新实例,从而将测试彼此隔离
不隶属于 StackOverflow