这是我的服务类别:

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

跑步 CanGetSomethingCanGetSomethingElse 单独使用 ReSharper 5 测试运行器工作正常,两个测试都通过。但是,尝试通过运行整个类来连续运行测试会导致第一个方法通过,而第二个方法抛出异常

系统对象处置异常:无法写入已关闭的 TextWriter。

我在第二次测试中调用什么方法似乎并不重要,任何调用 _db 会导致错误。评论出来 _db.Log = Console.Error 摆脱异常,它会正常工作。

我希望能够记录错误并立即运行一整类测试,但我不明白为什么它会这样。

有任何想法吗?

有帮助吗?

解决方案

不要分享您的测试班成员!不知道 resharper,但 VS 2010 UnitTesting 确实热衷于运行测试后的清理工作。我对这里发生的情况的假设是在构造 TestClass 时,您的上下文正在初始化。在运行一次测试之后。Resharper 会清理资源,因此也会处理您的上下文。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top