¿Por qué establecer que el Registro en un DataContext causa una excepción objectdisposedexception?
-
15-11-2019 - |
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?
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