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

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay