---
title: Тестирование в .NET
seo:
  title: "Тестирование в .NET — С# Developer"
  description: "Тема «Тестирование в .NET» для собеседования С# Developer. Чем принципиально отличаются unit-тесты от интеграционных тестов? Для чего нужны unit-тесты?"
---

[Все темы С# Developer](/s-developer)

## <strong>Чем принципиально отличаются</strong> <code>unit</code><strong>-тесты от интеграционных тестов?</strong> [#q-14bee738d69b8190bb58cc0aec02ab24]

Отличия <code>Unit</code>-тестов и Интеграционных тестов&#58;

{/* prettier-ignore */}
1. <code>Unit</code><strong>-тесты</strong>&#58;

    - <strong>Цель</strong>&#58; Проверяют отдельные компоненты (модули, функции, методы) изолированно.

    - <strong>Фокус</strong>&#58; Локальная логика и поведение отдельных единиц кода.

    - <strong>Изоляция</strong>&#58; Используют заглушки (stubs) и макеты (mocks) для имитации зависимостей.

    - <strong>Выполнение</strong>&#58; Быстрые и выполняются часто, обычно при каждом изменении кода.

    - <strong>Пример</strong>&#58; Тестирование функции расчета суммы двух чисел.

1. <strong>Интеграционные тесты</strong>&#58;

    - <strong>Цель</strong>&#58; Проверяют взаимодействие между несколькими компонентами или модулями.

    - <strong>Фокус</strong>&#58; Совместная работа и взаимодействие различных частей системы.

    - <strong>Изоляция</strong>&#58; Меньше изолированы, работают с реальными зависимостями (например, база данных, файловая система).

    - <strong>Выполнение</strong>&#58; Медленнее, выполняются реже, обычно после успешного прохождения unit-тестов.

    - <strong>Пример</strong>&#58; Тестирование взаимодействия между модулем аутентификации и базой данных пользователей.

#### Итог

- <strong>Unit-тесты</strong>&#58; Проверяют отдельные компоненты изолированно,
  быстрые и частые.

- <strong>Интеграционные тесты</strong>&#58; Проверяют взаимодействие
  компонентов, менее изолированы, медленнее и реже выполняются.

:::note[Ссылки для изучения]

1. [UNIT-Тесы VS Интеграционные тесты](https://testengineer.ru/unit-testy-vs-integracionnye-testy/)
   :::

---

## <strong>Для чего нужны</strong> <code>unit</code><strong>-тесты?</strong> [#q-14bee738d69b8185a33ff68a23903881]

<code>Unit</code>-тесты&#58;

{/* prettier-ignore */}
- <strong>Цель&#58;</strong> Проверка корректности отдельных модулей или функций кода.

- <strong>Преимущества&#58;</strong>

    - Обнаружение ошибок на ранних стадиях.

    - Упрощение рефакторинга.

    - Документация функциональности.

    - Улучшение надежности и качества кода.

<code>Unit</code>-тесты помогают гарантировать, что отдельные части кода
работают как ожидалось.

:::note[Ссылки для изучения]

1. [Для чего нужны unit-тесты?](https://practicum.yandex.ru/blog/chto-takoe-modulnoe-yunit-testirovanie/)
   :::

---

## <strong>Какие преимущества и недостатки использования</strong> <code>unit</code><strong>-тестов?</strong> [#q-14bee738d69b817099cce574352ca7ab]

Преимущества&#58;

- <strong>Раннее обнаружение ошибок&#58;</strong> Упрощают нахождение и
  исправление багов на ранних стадиях разработки.

- <strong>Документация&#58;</strong> Действуют как живая документация кода.

- <strong>Рефакторинг&#58;</strong> Облегчают изменения в коде, обеспечивая его
  работоспособность после изменений.

- <strong>Качество кода&#58;</strong> Способствуют написанию более чистого и
  модульного кода.

Недостатки&#58;

- <strong>Время и затраты&#58;</strong> Требуют дополнительного времени и
  ресурсов для написания и поддержки.

- <strong>Ложное чувство безопасности&#58;</strong> Могут дать ощущение полной
  защищенности, но не покрывают все возможные сценарии.

- <strong>Сложность в тестировании сложных зависимостей&#58;</strong>
  Тестирование сложных взаимодействий может быть трудоемким.

<code>Unit</code>-тесты улучшают надежность кода, но требуют времени и усилий
для создания и поддержания.

:::note[Ссылки для изучения]

1. [Для чего нужны unit-тесты?](https://practicum.yandex.ru/blog/chto-takoe-modulnoe-yunit-testirovanie/)
   :::

---

## <strong>Из каких трех логических блоков состоит</strong> <code>unit</code><strong>-тест?</strong> [#q-14bee738d69b812dbb0be8942db531d1]

<code>Unit</code>-тест состоит из трех логических блоков&#58;

1. <code>Arrange</code> <strong>(Подготовка)&#58;</strong> Инициализация
   объектов и установка начальных условий.

1. <code>Act</code> <strong>(Действие)&#58;</strong> Выполнение тестируемого
   метода или операции.

1. <code>Assert</code> <strong>(Проверка)&#58;</strong> Проверка результатов
   выполнения и сравнение их с ожидаемыми значениями.

#### Пример&#58;

```csharp
[TestMethod]
public void TestAddition()
{
    // Arrange
    int a = 2;
    int b = 3;
    int expected = 5;

    // Act
    int result = Add(a, b);

    // Assert
    Assert.AreEqual(expected, result);
}
```

:::note[Ссылки для изучения]

1. [Анатомия unit-теста](https://habr.com/ru/articles/554808/)
   :::
