DataContextのログオンを設定するのは、ObjectDisposedExceptionを原因にしますか?

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

CanGetSomethingCanGetSomethingElseを別々に使用して、Resharper 5テストランナーがうまく機能し、両方のテストは合格です。ただし、クラス全体を実行してテストを続行しようとすると、最初のメソッドが渡され、2番目のメソッドが例外をスローします。

System.ObjectDisposedException:クローズドテキストライターに書き込めません。

2番目のテストでどのメソッドを呼び出すかは問題ではありません._dbを呼び出すものはエラーを引き起こします。_db.Log = Console.Errorをコメントする例外を解消し、それはうまく機能します。

エラーを記録して一度にテストのクラス全体を実行できるようにしたいが、それがこのように動作している理由を理解することはできません。

任意のアイデア?

役に立ちましたか?

解決

Dont share members of your test class! Not knowing resharper, but VS 2010 UnitTesting is really kean on cleaning up after running a test. My assumption for what happens here is when constructing your TestClass, your context is being initialized. And after running a single test. Resharper cleans up the resources, therefore also disposing your context.

Use a TestInitialize to create a new instance of your dataContext, therefore isolating your tests from one another

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top