Почему установка Log на DataContext вызывает исключение ObjectDisposedException? - PullRequest
0 голосов
/ 18 мая 2011

Это мой класс обслуживания:

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 работает нормально,оба теста пройдены.Тем не менее, попытка запустить тесты подряд, запустив весь класс, заставляет первый метод пройти, а второй метод вызывает исключение

System.ObjectDisposedException: Невозможно выполнить запись в закрытый TextWriter.

Кажется, не имеет значения, какой метод я вызываю во втором тесте, все, что вызывает _db, вызовет ошибку.Комментирование _db.Log = Console.Error избавляет от исключения, и оно будет работать нормально.

Я хотел бы иметь возможность регистрировать ошибку и запускать целый класс тестов одновременно, но я не могу понятьпочему это ведет себя так.

Есть идеи?

1 Ответ

1 голос
/ 18 мая 2011

Не делитесь участниками вашего тестового класса! Не зная resharper, но VS 2010 UnitTesting действительно заинтересован в очистке после запуска теста. Я предполагаю, что здесь происходит, когда вы создаете свой TestClass, ваш контекст инициализируется. И после запуска одного теста. Resharper очищает ресурсы, поэтому также избавляется от вашего контекста.

Используйте TestInitialize для создания нового экземпляра вашего dataContext, таким образом изолируя ваши тесты друг от друга

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...