Sobes.tech
Junior — Middle

Cum contribuiează inversarea dependențelor la facilitarea procesului de testare a codului?

sobes.tech AI

Răspuns de la AI

Principiul inversiunii dependențelor (Dependency Inversion Principle) permite separarea logicii de nivel înalt de implementările concrete ale dependențelor, înlocuindu-le cu abstracții (de exemplu, interfețe). Acest lucru facilitează testarea, deoarece în teste se pot folosi mock-uri sau stub-uri în locul dependențelor reale, fără a modifica codul testat.

Exemplu în C#:

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

public class FileLogger : ILogger
{
    public void Log(string message) { /* scriere în fișier */ }
}

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

    public void CreateUser(string name)
    {
        // logică de creare utilizator
        _logger.Log($"Utilizator {name} creat");
    }
}

// În teste, se poate transmite un mock de ILogger:
public class MockLogger : ILogger
{
    public List<string> Messages = new List<string>();
    public void Log(string message) => Messages.Add(message);
}

Astfel, testele nu depind de implementări reale și pot verifica logica în mod izolat.