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

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more