Ответ
Компонентные тесты (или модульные тесты) проверяют отдельные модули, классы или функции в изоляции от остальной системы. Основная цель — убедиться, что каждая единица кода работает корректно сама по себе.
Мой подход:
-
Изоляция зависимостей: Использую моки (mocks) и стабы (stubs) для всех внешних зависимостей (база данных, API, файловая система, другие модули). Например, в проекте на Java с JUnit и Mockito это выглядит так:
@Test void calculateDiscount_ShouldApplyTenPercent() { // Arrange: Создаем мок зависимости и тестируемый объект CustomerRepository mockRepo = mock(CustomerRepository.class); when(mockRepo.isPremium(anyLong())).thenReturn(true); DiscountService service = new DiscountService(mockRepo); // Act: Вызываем метод double result = service.calculateDiscount(100.0, 123L); // Assert: Проверяем результат assertEquals(90.0, result, 0.001); } - Фокус на поведении: Тестирую публичный контракт (public API) компонента — что он принимает, что возвращает и какие исключения бросает. Избегаю тестирования приватных методов.
- Структура AAA (Arrange-Act-Assert): Четко разделяю этапы подготовки, выполнения и проверки для читаемости.
- Именование тестов: Использую шаблоны вроде
MethodName_StateUnderTest_ExpectedBehavior. Например,processOrder_WithNullItems_ThrowsIllegalArgumentException.
Ключевые инструменты в QA/тестировании: JUnit/TestNG (Java), pytest (Python), NUnit (.NET), Jest (JavaScript).