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.