¿Por qué establecer que el Registro en un DataContext causa una excepción objectdisposedexception?

StackOverflow https://stackoverflow.com/questions/6046904

Pregunta

Esta es mi clase de servicio:

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

Esta es mi clase de prueba

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

Ejecución CanGetSomething y CanGetSomethingElse por separado, utilice la ReSharper 5 test runner funciona bien, tanto en fase de pruebas.Sin embargo, tratando de ejecutar las pruebas en la sucesión mediante la ejecución de la totalidad de la clase hace que el primer método para pasar y el segundo método para lanzar la excepción

Sistema.Excepción objectdisposedexception:No se puede escribir en un cerrado TextWriter.

Parece que no importa qué método me llame en la segunda prueba, cualquier cosa que se llama _db provocará el error.Comentar _db.Log = Console.Error se deshace de la excepción, y funcionará bien.

Me gustaría ser capaz de iniciar el error y ejecutar toda clase de pruebas a la vez, pero no puedo averiguar por qué se está comportando como este.

Alguna idea?

¿Fue útil?

Solución

No comparta los miembros de tu clase de prueba!No saber resharper, pero VS 2010 UnitTesting es realmente kean en la limpieza después de la ejecución de una prueba.Mi hipótesis de lo que sucede aquí es cuando la construcción de su TestClass, su contexto se inicializa.Y después de la ejecución de una sola prueba.Resharper limpia los recursos, por lo tanto también de deshacerse de su contexto.

El uso de un TestInitialize para crear una nueva instancia de la dataContext, por lo tanto, el aislamiento de las pruebas de uno a otro

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top