Sobes.tech
Junior — Middle

Como é que a inversão de dependências facilita o processo de teste do código?

sobes.tech IA

Resposta da IA

O Princípio da Inversão de Dependências (Dependency Inversion Principle) permite separar a lógica de alto nível das implementações específicas de dependências, substituindo-as por abstrações (por exemplo, interfaces). Isso facilita os testes, pois é possível usar mocks ou stubs nos testes em vez de dependências reais, sem alterar o código que está sendo testado.

Exemplo em C#:

public interface ILogger
{
    void Log(string message);
}

public class FileLogger : ILogger
{
    public void Log(string message) { /* grava no arquivo */ }
}

public class UserService
{
    private readonly ILogger _logger;
    public UserService(ILogger logger)
    {
        _logger = logger;
    }

    public void CreateUser(string name)
    {
        // lógica de criação de usuário
        _logger.Log($"Usuário {name} criado");
    }
}

// Nos testes, pode-se passar um mock de ILogger:
public class MockLogger : ILogger
{
    public List<string> Messages = new List<string>();
    public void Log(string message) => Messages.Add(message);
}

Dessa forma, os testes não dependem de implementações reais e podem verificar a lógica de forma isolada.