这是我的服务类:
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测试运行器单独运行CanGetSomething
和CanGetSomethingElse
工作正常,两个测试都通过。但是,尝试通过运行整个类来连续运行测试会导致第一个方法通过,第二个方法抛出异常
System.ObjectDisposedException:无法写入已关闭的TextWriter。
在第二次测试中我调用的方法似乎并不重要,调用_db
的任何内容都会导致错误。注释掉_db.Log = Console.Error
可以摆脱异常,它可以正常工作。
我希望能够记录错误并立即运行整个测试类,但我无法弄清楚为什么它会像这样。
有什么想法吗?
答案 0 :(得分:1)
不要分享您的测试类的成员!不知道resharper,但VS 2010 UnitTesting真的非常希望在运行测试后进行清理。我对这里发生的事情的假设是在构造TestClass时,正在初始化您的上下文。并且在运行单个测试之后。 Resharper清理资源,因此也处理你的上下文。
使用TestInitialize创建dataContext的新实例,从而将测试彼此隔离