.NET - Usando MOQ em testes unitários - II
No artigo de hoje eu vou apresentar os conceitos de objetos mocks e mostrar como usar o framework MOQ para simular o comportamento de objetos reais na plataforma .NET. |
Na primeira parte deste artigo eu apresentei os conceitos sobre
mocks, stubs e fakes e introduzi o framework MOQ.
Criamos também um projeto chamado Moq_Demo e definimos algumas classes representando um cenário hipotético onde temos uma classe Socio, uma interface ISocio e uma classe Clube onde calculamos o valor do frete do material enviado aos sócios através do método CalcularFrete().
Vamos agora criar o projeto de testes e usar o framework MOQ para mocar o objeto Socio e realizar testes de unidade.
Recursos Usados
Incluindo o projeto de testes na solução
Abra o projeto Moq_demo Criado no artigo anterior e no menu File clique em Add -> New Project;
A seguir selecione Visual C# -> Test e o template Unit Test Project;
Informe o nome ClubeOperacoes_Teste e clique no botão OK;
Será cria o projeto contendo uma classe para testes de unidade.
Altere o nome da classe criada por padrão para ClubeOperacoesTesteMoq.
Altere também o nome do método padrão desta classe para CalcularFreteTeste.
Agora antes de prosseguir vamos incluir uma referência ao projeto Moq_Demo em nosso projeto de testes.
Clique com o botão direito sobre o projeto ClubeOperacoesTeste e a seguir clique em Add -> Reference;
A seguir marque o projeto Moq_Demo para referenciá-lo :
Agora antes de prosseguir vamos incluir uma referência a biblioteca MOQ em nosso projeto via Nuget.
No menu TOOLS clique em Nuget Package Manager -> Manage Nuget Packages for Solution;
Digite o texto moq para localizar o pacote e a seguir selecione e clique no botão Install ao lado do pacote:
Se você preferir pode usar o console :
No menu TOOLS clique em Nuget Package Manager -> Package Manager Console;
No console digite o seguinte comando: Install-Package Moq
Ao final você deverá na janela Solution Explorer as referências ao Moq instaladas em nosso projeto de testes:
Finalmente vamos definir o código do método CalcularFreteTeste onde iremos usar o MOQ para mocar o objeto Socio e realizar um teste de unidade no neste método:
Declare os seguintes namespaces na classe ClubeOperacoesTeste :
using
System;A seguir digite o código abaixo no método CalcularFreteTeste :
[TestClass]
public class ClubeOperacoesTesteMoq
{
private Clube _target;
private Mock<ISocio> _mock;
[TestMethod]
public void CalcularFreteTeste()
{
_mock = new Mock<ISocio>();
_target = new Clube(_mock.Object);
Socio _socio = new Socio()
{
SocioID = 1,
Nome = "Jose Carlos",
Sobrenome = "Macoratti",
Idade = 45,
Limite = 5,
};
_mock.Setup(x => x.GetSocio(It.IsAny<int>())).Returns(_socio);
int socioID = 1;
double esperado = 14;
double obtido = _target.CalcularFrete(socioID);
Assert.AreEqual(esperado, obtido);
}
}
|
Neste código primeiro criamos um objeto mock usando a interface ISocio e então passamos o objeto para o construtor da classe Clube.
Na classe Clube já aplicamos a inversão de controle(IoC) removendo as dependências das classes concretas.
Como estamos usando a injeção de dependência na classe Clube podemos realizar essa operação.
private Clube _target; private Mock<ISocio> _mock; .... _mock = new Mock<ISocio>();
A seguir criamos um objeto da classe Socio e estamos dizendo ao objeto criado para mocar o objeto. Aqui podemos passar qualquer tipo de parâmetro inteiro para o método GetSocio e o framework MOQ irá retornar o objeto socio que criamos.
Socio _socio = new Socio()
{
SocioID = 1,
Nome = "Jose Carlos",
Sobrenome = "Macoratti",
Idade = 45,
Limite = 5,
};
_mock.Setup(x => x.GetSocio(It.IsAny<int>())).Returns(_socio);
Agora podemos executar o nosso teste unitário definindo o código do sócio mocado , o valor esperado e comparar com o valor obtido no teste.
Para executar o teste clique com o botão direito do mouse sobre o método CalcularFrete e a seguir clique em Run Tests :
Abaixo vemos o resultado do teste indicando que o mesmo passou :
Poderíamos continuar a realizar outros testes mas creio que você entendeu o básico da utilização do framework MOQ.
Em outros artigos pretendo tratar de cenários mais complexos usando o MOQ.
Pegue o projeto completo aqui: Moq_Demo.zip
(Disse Jesus) Assim, pois, qualquer de vós, que não renuncia a tudo quanto tem,
não pode ser meu discípulo.
Lucas 14:33
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
.NET - Inversão de controle e Injeção de dependência para ...