Aqui temos a classe Business com o método "ValidarNome" que é privado e o método "Consultar" que é estático.
//Classe de Negôcio
public class PessoaBusiness
{
public bool Incluir(PessoaEntity pessoa)
{
ValidarNome(pessoa);
ValidarIdade(pessoa);
PessoaDAL pessoaDAL = new PessoaDAL();
return pessoaDAL.Incluir(pessoa);
}
private void ValidarNome(PessoaEntity pessoa)
{
if (pessoa.Nome.Trim().Length == 0)
{
throw (new ArgumentException("O nome deve ser preenchido!"));
}
}
private void ValidarIdade(PessoaEntity pessoa)
{
if (pessoa.Idade <= 0)
{
throw (new Exception("A idade deve ser maior que zero!"));
}
}
public static bool Existe(PessoaEntity pessoa)
{
if (pessoa != null)
{
PessoaDAL pessoaDAL = new PessoaDAL();
return pessoaDAL.Existe(pessoa);
}
return false;
}
}
Teste de método privado:
Para que você consiga realizar o teste unitário em cima de um método privado, você precisará utilizar a classe "PrivateObject" encontrada no namespace "Microsoft.VisualStudio.TestTools.UnitTesting".
//Teste Unitário - Privado
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void ValidarNomePessoaTest()
{
PessoaEntity _pessoa = new PessoaEntity();
_pessoa.Nome = string.Empty;
_pessoa.Idade = 20;
//Crie uma instância da classe que contêm o
//método a ser testado.
PessoaBusiness pessoaBS = new PessoaBusiness();
//Crie um objeto do tipo PrivateObject, passando por
//parâmetro a instância criada anteriormente.
PrivateObject privateObject = new PrivateObject(pessoaBS);
//Faça a chamada ao método privado, passando os
//parâmetros do método caso exista.
privateObject.Invoke("ValidarNome", pessoa);
Assert.Fail();
}
Teste de método estático:
Para testar um método STATIC, utilize a classe "PrivateType" (contida no mesmo namespace), conforme exemplo abaixo:
//Teste Unitário - Estático
[TestMethod]
[HostType("Moles")]
public void ExistePessoaTest()
{
PessoaEntity _pessoa = new PessoaEntity();
_pessoa.Nome = "José Otávio";
_pessoa.Idade = 28;
MPessoaDAL.ExistePessoaEntity =(r, pessoa) =>
{
return true;
};
//Crie um objeto do tipo PrivateType, passando por
//parâmetro o tipo da classe que contêm o método static.
PrivateType privateType = new PrivateType(typeof(PessoaBusiness));
//Faça a chamada ao método static, passando os
//parâmetros do método caso exista.
bool existePessoa = (bool) privateType.InvokeStatic("Existe", pessoa);
Assert.AreEqual(true, existePessoa);
}
0 comentários:
Postar um comentário