Pergunta

Esta é minha classe de serviço:

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 é minha aula de teste

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

Correndo CanGetSomething e CanGetSomethingElse separadamente, usar o executor de teste ReSharper 5 funciona bem, ambos os testes são aprovados.No entanto, tentar executar os testes em sucessão executando a classe inteira faz com que o primeiro método seja aprovado e o segundo método lance a exceção

System.ObjectDisposedException:Não é possível gravar em um TextWriter fechado.

Não parece importar qual método eu chamo no segundo teste, qualquer coisa que chame _db causará o erro.Comentando _db.Log = Console.Error elimina a exceção e funcionará bem.

Gostaria de poder registrar o erro e executar uma classe inteira de testes de uma só vez, mas não consigo entender por que ele está se comportando assim.

Alguma ideia?

Foi útil?

Solução

Não compartilhe membros da sua turma de teste!Não sabendo o resharper, mas o VS 2010 UnitTesting está realmente interessado em limpar depois de executar um teste.Minha suposição sobre o que acontece aqui é que, ao construir seu TestClass, seu contexto está sendo inicializado.E depois de executar um único teste.O Resharper limpa os recursos, descartando também o seu contexto.

Use um TestInitialize para criar uma nova instância do seu dataContext, isolando assim seus testes uns dos outros

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top