> For the complete documentation index, see [llms.txt](https://igor-19.gitbook.io/qa/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://igor-19.gitbook.io/qa/avtomatizaciya-testirovaniya/principy-razrabotki-po/solid-v-avtomatizacii-testirovaniya/d-dependency-inversion-principle-princip-inversii-zavisimostei.md).

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

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

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

<pre><code>// Принцип инверсии зависимостей (DIP) 
// Пример: использование фреймворков внедрения зависимостей или создание 
фиктивных объектов 
<strong>public interface IDatabase
</strong>{
    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");

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