D — Dependency Inversion Principle(Принцип инверсии зависимостей)

Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций. В автоматизации тестирования этот принцип предполагает отделение наших тестов от внешних зависимостей, таких как базы данных, API или элементы пользовательского интерфейса. Используя уровни внедрения зависимостей и абстракции, мы можем создавать тестируемые компоненты, независимые от конкретных реализаций, что делает наши тесты более устойчивыми к изменениям.

Например: использование фреймворков внедрения зависимостей или создание фиктивных объектов для изоляции тестов от внешних зависимостей, таких как базы данных или API.

// Принцип инверсии зависимостей (DIP) 
// Пример: использование фреймворков внедрения зависимостей или создание 
фиктивных объектов 
public interface IDatabase
{
    void SaveData(string data);
}

public class Database : IDatabase
{
    public void SaveData(string data)
    {
        // Реализация для сохранения данных в базу данных
    }
}

public class MockDatabase : IDatabase
{
    public void SaveData(string data)
    {
        // Макетная реализация для тестирования
    }
}

public class DataProcessor
{
    private readonly IDatabase _database;

    public DataProcessor(IDatabase database)
    {
        _database = database;
    }

    public void ProcessData(string data)
    {
        // Обработка данных...
        _database.SaveData(data);
    }
}

public class DataProcessorTest
{
    [Test]
    public void DataIsSavedToDatabase()
    {
        IDatabase mockDatabase = new MockDatabase();
        DataProcessor dataProcessor = new DataProcessor(mockDatabase);

        dataProcessor.ProcessData("Test data");

        // Проверка утверждения...
    }
}

Last updated