Sobes.tech
Junior — Middle

How does dependency inversion facilitate easier testing of code?

sobes.tech AI

Answer from AI

Dependency Inversion Principle allows separating high-level logic from specific implementations of dependencies by replacing them with abstractions (for example, interfaces). This makes testing easier, as mocks or stubs can be substituted in tests instead of real dependencies without changing the tested code.

Example in C#:

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

public class FileLogger : ILogger
{
    public void Log(string message) { /* write to file */ }
}

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

    public void CreateUser(string name)
    {
        // user creation logic
        _logger.Log($"User {name} created");
    }
}

// In tests, you can pass a mock ILogger:
public class MockLogger : ILogger
{
    public List<string> Messages = new List<string>();
    public void Log(string message) => Messages.Add(message);
}

Thus, tests do not depend on real implementations and can independently verify logic.