ASP NET MVC + NHibernate + ExtJs – Parte 5

Hoje vamos realizar testes em nosso CRUD para ver se tudo está certo, então mão na massa…

Vamos criar um novo projeto de testes, clique com o botão direito em cima da pasta Testes e selecione a opção Add -> New Project, e depois selecione Test -> Test Project e coloque o nome de Contatos.Business.Teste

Antes de mais nada, vamos adicionar a referência ao projeto Contatos.Business e Contatos.Factory, clique com o botão direito em cima do projeto de teste Contatos.Business.Teste e selecione a opção Add -> Reference, depois na aba Projects e selecione os projetos Contatos.Business e Contatos.Factory.

Depois de criado o projeto de teste e adicionado as referências, temos prestar atenção em alguns detalhes:

  1. Copiar o arquivo hibernate.cfg.xml do projeto Contatos.Factory.Teste para Contatos.Business.Teste
  2. Adicionar referências para as seguintes DLLs: NHibernate.dll, NHibernate.ByteCode.LinFu.dll, Npgsql.dll

Veja abaixo a estrutura do projeto:

Vamos adicionar uma nova classe de teste, clique com o botão direito em cima do projeto Contatos.Business.Teste e seleicone a opção Add -> New Test e coloque o nome de TipoTelefoneTeste.cs.

Para cada operação do CRUD vamos criar um método de teste, vamos começar com a classe mais fácil TipoTelefone, veja abaixo a implementação desses métodos.

[sourcecode language=”csharp”]
[TestMethod]
public void cadastrar()
{
TipoTelefone _tipoCelular = new TipoTelefone();
_tipoCelular.Descricao = "Tipo Celular";

TipoTelefone _tipoResidencial = new TipoTelefone();
_tipoResidencial.Descricao = "Tipo Residencial";

TipoTelefoneRepository _repository = new TipoTelefoneRepository();
_repository.Salvar(_tipoCelular);
_repository.Salvar(_tipoResidencial);
}

[TestMethod]
public void alterar()
{
TipoTelefone _obj = new TipoTelefone();
_obj.Codigo = 1;
_obj.Descricao = "Tipo do Telefone Novo";

TipoTelefoneRepository _repository = new TipoTelefoneRepository();
_repository.Alterar(_obj);
}

[TestMethod]
public void deletar()
{
TipoTelefone _obj = new TipoTelefone();
_obj.Codigo = 1;

TipoTelefoneRepository _repository = new TipoTelefoneRepository();
_repository.Excluir(_obj);
}

[TestMethod]
public void selecionarTodos()
{
TipoTelefoneRepository _repository = new TipoTelefoneRepository();
IList<TipoTelefone> fromDB = _repository.ObterTodos();
Assert.IsNotNull(fromDB);

foreach (TipoTelefone _atual in fromDB)
{
Console.WriteLine(_atual.Codigo);
Console.WriteLine(_atual.Descricao);
Console.WriteLine("——————————–");
}
}

[TestMethod]
public void selecionarCodigo()
{
TipoTelefoneRepository _repository = new TipoTelefoneRepository();
TipoTelefone fromDB = _repository.ObterPorId(4);
Assert.IsNotNull(fromDB);

Console.WriteLine(fromDB.Codigo);
Console.WriteLine(fromDB.Descricao);
}
[/sourcecode]

Resultado da execução dos testes.

Agora vamos fazer os testes com a entidade Contato, que é mais complexa que a TipoTelefone, já que a mesma possui relacionamentos com outras entidades, adicione uma nova classe de teste com o nome ContatoTeste e vamos criar os métodos de testes.

Teste Cadastrar Contato

[sourcecode language=”csharp”]
[TestMethod]
public void cadastrar()
{
// Recupera os Tipo do Telefone – vamos usar para cadastrar um Telefone
TipoTelefoneRepository tipoTelefoneRepository = new TipoTelefoneRepository();
TipoTelefone tipoCel = tipoTelefoneRepository.ObterPorId(1);
TipoTelefone tipoRes = tipoTelefoneRepository.ObterPorId(2);

// Cria um novo contato
Contato contato = new Contato();
contato.Nome = "Leandro Prado";
contato.DataNascimento = Convert.ToDateTime("30/12/1983");
contato.Sexo = ‘M’;
contato.Email = "contato@leandroprado.com.br";
contato.WebSite = "www.leandroprado.com.br";
contato.Anotacoes = "Teste com a entidade Contato";

// Lista de Grupos
GrupoRepository grupoRepository = new GrupoRepository();
IList<Grupo> lstGrupo = grupoRepository.ObterTodos();

// adiciona lista de grupos ao contato
contato.ListaGrupos = lstGrupo;

// Lista de telefones
IList<Telefone> lstTelefone = new List<Telefone>();

// Cria um tipo de telefone celular
Telefone telCelular = new Telefone();
// relaciona o telefone com o contato criado
telCelular.ContatoTelefone = contato;
telCelular.CodigoDDD = 41;
telCelular.Numero = 12345678;
telCelular.TipoTel = tipoCel;
lstTelefone.Add(telCelular);

// Cria um tipo de telefone residencial
Telefone telResidencial = new Telefone();
// relaciona o telefone com o contato criado
telResidencial.ContatoTelefone = contato;
telResidencial.CodigoDDD = 41;
telResidencial.Numero = 87654321;
telResidencial.TipoTel = tipoRes;
lstTelefone.Add(telResidencial);

// adiciona a lista de telefones ao contato
contato.ListaTelefones = lstTelefone;

// manda salvar o contato
ContatoRepository contatoRepository = new ContatoRepository();
contatoRepository.Salvar(contato);
}
[/sourcecode]

Veja abaixo o resultado da execução desse método:

Agora vamos verificar como está os resgistros no banco:

Teste Selecionar por Código do Contato

Vamos criar o método de teste para selecionar o contato cadastrado, veja abaixo o código:

[sourcecode language=”csharp”]
[TestMethod]
public void selecionarCodigo()
{
ContatoRepository contatoRepository = new ContatoRepository();
Contato fromDB = contatoRepository.ObterPorId(17);
Assert.IsNotNull(fromDB);

Console.WriteLine(fromDB.Codigo);
Console.WriteLine(fromDB.Nome);
Console.WriteLine(fromDB.Email);
Console.WriteLine(fromDB.Sexo);
Console.WriteLine(fromDB.Anotacoes);

foreach (var _tel in fromDB.ListaTelefones)
{
Console.WriteLine(_tel.CodigoDDD);
Console.WriteLine(_tel.Numero);
Console.WriteLine(_tel.TipoTel.Descricao);
Console.WriteLine("——————————–");
}

foreach (var _grp in fromDB.ListaGrupos)
{
Console.WriteLine(_grp.Nome);
Console.WriteLine(_grp.Descricao);
Console.WriteLine("——————————–");
}

contatoRepository.CloseSession();
}
[/sourcecode]

Veja o resultado da execução desse teste:

Podemos observar que o NHibernate ja recupera toda a nossa estrutura do banco, recupera o Contato -> Lista de Telefones -> Lista de Grupos.

Agora vamos criar o teste para Deletar um contato, veja abaixo:

[sourcecode language=”csharp”]
[TestMethod]
public void deletar()
{
ContatoRepository _repository = new ContatoRepository();
Contato contato = _repository.ObterPorId(17);
_repository.Excluir(contato);
}
[/sourcecode]

Podemos ver que o NHibernate ja deletou toda as tabelas filhas Telefone e ContatoGrupo, vamos verificar no banco:

Agora é só seguir o exemplos acima e criar os testes para as outras entidades, no próximo post vamos começar a criar as telas com EXT JS.

Download Parte 5

Até a próxima!

Sobre Leandro Prado

Leandro Silveira Prado é Premier Field Engineer na Microsoft especializado em Application Lifecycle Management.