DEV Community

Juarez Júnior for Develop4Us

Posted on • Edited on

Testes Unitários com Mocks Usando Moq

O Moq é uma biblioteca de mocking para .NET que facilita a criação de testes unitários ao permitir a simulação de comportamentos e dependências de classes. Ele é muito utilizado para criar “mocks” de interfaces ou objetos complexos, permitindo que você isole a lógica de negócio em seus testes. O Moq é simples de usar e ajuda a testar cenários que dependem de chamadas a serviços externos, bancos de dados ou APIs. Neste exemplo, vamos criar um teste unitário simulando o comportamento de uma interface usando o Moq.

Bibliotecas:

Para usar a biblioteca Moq, instale o seguinte pacote NuGet no seu projeto:

Install-Package Moq
Enter fullscreen mode Exit fullscreen mode

Código de Exemplo:

using Moq;
using System;
using Xunit;

// Interface que será mockada
public interface ICalculadora
{
    int Somar(int a, int b);
}

// Classe que utiliza a interface
public class Operacoes
{
    private readonly ICalculadora _calculadora;

    public Operacoes(ICalculadora calculadora)
    {
        _calculadora = calculadora;
    }

    public int ExecutarSoma(int a, int b)
    {
        return _calculadora.Somar(a, b);
    }
}

public class OperacoesTests
{
    [Fact]
    public void ExecutarSoma_DeveRetornarSomaCorreta()
    {
        // Criando o mock da interface ICalculadora
        var mockCalculadora = new Mock<ICalculadora>();

        // Definindo o comportamento esperado para o método Somar
        mockCalculadora.Setup(c => c.Somar(2, 3)).Returns(5);

        // Usando o mock na classe Operacoes
        var operacoes = new Operacoes(mockCalculadora.Object);
        var resultado = operacoes.ExecutarSoma(2, 3);

        // Verificando se o resultado é o esperado
        Assert.Equal(5, resultado);

        // Verificando se o método Somar foi chamado exatamente uma vez
        mockCalculadora.Verify(c => c.Somar(2, 3), Times.Once);
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

Neste exemplo, criamos uma interface chamada ICalculadora com um método Somar. Em seguida, criamos a classe Operacoes, que utiliza essa interface. No teste unitário ExecutarSoma_DeveRetornarSomaCorreta, usamos o Moq para criar um “mock” da interface ICalculadora, definindo que, quando o método Somar for chamado com os parâmetros 2 e 3, ele deverá retornar 5. O teste verifica se o resultado é o esperado e se o método Somar foi chamado uma vez.

Conclusão:

O Moq é uma ferramenta poderosa para criar mocks e simplificar testes unitários. Ele permite simular comportamentos complexos, facilitando o isolamento da lógica de negócio e permitindo que os testes se concentrem nas funcionalidades principais sem depender de implementações reais.

Código fonte: GitHub

Top comments (0)