これは私のサービスクラスです:
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
ただし、クラス全体を実行してテストを連続して実行しようとすると、最初のメソッドが合格し、2番目のメソッドが例外をスローします。
System.ObjectDisposedException:閉じたTextWriterに書き込めません。
2番目のテストでどのメソッドを呼び出すかは問題ではないようです。呼び出す_db
と、エラーが発生します。コメントアウトする_db.Log = Console.Error
と例外がなくなり、正常に機能します。
エラーをログに記録して、クラス全体のテストを一度に実行できるようにしたいのですが、なぜこのように動作しているのか理解できません。
何か案は?