Sobes.tech
Junior — Middle

Jak odwrócenie zależności przyczynia się do ułatwienia procesu testowania kodu?

sobes.tech AI

Odpowiedź od AI

Zasada odwrócenia zależności (Dependency Inversion Principle) pozwala oddzielić logikę wysokiego poziomu od konkretnych implementacji zależności, zastępując je abstrakcjami (np. interfejsami). Ułatwia to testowanie, ponieważ można w testach używać atrap lub mocków zamiast rzeczywistych zależności, nie zmieniając testowanego kodu.

Przykład w C#:

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

public class FileLogger : ILogger
{
    public void Log(string message) { /* zapis do pliku */ }
}

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

    public void CreateUser(string name)
    {
        // logika tworzenia użytkownika
        _logger.Log($"Użytkownik {name} utworzony");
    }
}

// W testach można przekazać mock ILogger:
public class MockLogger : ILogger
{
    public List<string> Messages = new List<string>();
    public void Log(string message) => Messages.Add(message);
}

W ten sposób testy nie zależą od rzeczywistych implementacji i mogą niezależnie sprawdzać logikę.