* Updatedt Solution format
Тесты для Telegrator
Этот проект содержит комплексные тесты для библиотеки Telegrator, демонстрирующие различные парадигмы и подходы к тестированию.
Структура тестов
1. Filters (Фильтры)
Файл: Filters/FilterTests.cs
Парадигмы тестирования:
- AAA (Arrange-Act-Assert) - структура теста: подготовка, действие, проверка
- Given-When-Then - альтернативная формулировка AAA для лучшей читаемости
- Тестирование граничных случаев и исключений
- Использование моков для изоляции тестируемого кода
- Тестирование как позитивных, так и негативных сценариев
Что тестируется:
- Базовые фильтры (AnyFilter, ReverseFilter, AndFilter, OrFilter)
- Компиляция фильтров
- Логические операции между фильтрами
- Свойства фильтров (IsCollectible)
2. Handlers (Обработчики)
Файл: Handlers/HandlerTests.cs
Парадигмы тестирования:
- Mocking - создание моков для изоляции зависимостей
- Dependency Injection - тестирование через интерфейсы
- Test Doubles - использование заглушек вместо реальных объектов
- Behavior Verification - проверка поведения, а не только результата
- Exception Testing - тестирование исключений
Что тестируется:
- Базовые обработчики обновлений
- Жизненный цикл обработчиков
- Обработка исключений
- Отмена операций
- Токены жизненного цикла
3. Descriptors (Дескрипторы)
Файл: Descriptors/HandlerDescriptorTests.cs
Парадигмы тестирования:
- Builder Pattern Testing - тестирование паттерна строителя
- Factory Pattern Testing - тестирование фабричных методов
- Immutable Object Testing - тестирование неизменяемых объектов
- Configuration Testing - тестирование конфигурации объектов
- Validation Testing - тестирование валидации данных
Что тестируется:
- Создание дескрипторов обработчиков
- Различные типы дескрипторов (General, Singleton, Keyed, Implicit)
- Наборы фильтров
- Индексаторы
- Валидация параметров
4. Providers (Провайдеры)
Файл: Providers/ProviderTests.cs
Парадигмы тестирования:
- Service Layer Testing - тестирование сервисного слоя
- Integration Testing - тестирование интеграции компонентов
- Collection Testing - тестирование коллекций и их операций
- Provider Pattern Testing - тестирование паттерна провайдера
- Dependency Resolution Testing - тестирование разрешения зависимостей
Что тестируется:
- Провайдеры обработчиков
- Коллекции обработчиков
- Операции с коллекциями
- Интеграция между провайдерами
5. Hosting (Хостинг)
Файл: Hosting/HostingTests.cs
Парадигмы тестирования:
- Host Testing - тестирование хостинга приложений
- Configuration Testing - тестирование конфигурации
- Dependency Injection Testing - тестирование DI контейнера
- Builder Pattern Testing - тестирование паттерна строителя
- Lifecycle Testing - тестирование жизненного цикла приложения
Что тестируется:
- Строители хостов
- Конфигурация ботов
- Жизненный цикл хостов
- Валидация параметров
6. Collections (Коллекции)
Файл: Collections/CollectionTests.cs
Парадигмы тестирования:
- Collection Testing - тестирование коллекций и их операций
- List Testing - тестирование списков
- Indexing Testing - тестирование индексации
- Enumeration Testing - тестирование перечисления
- Capacity Testing - тестирование емкости коллекций
Что тестируется:
- Списки дескрипторов обработчиков
- Списки завершенных фильтров
- Операции с коллекциями
- Производительность
- Потокобезопасность
7. Integration (Интеграционные тесты)
Файл: Integration/IntegrationTests.cs
Парадигмы тестирования:
- Integration Testing - тестирование взаимодействия компонентов
- End-to-End Testing - тестирование полного потока
- System Testing - тестирование системы в целом
- Workflow Testing - тестирование рабочих процессов
- Scenario Testing - тестирование сценариев использования
Что тестируется:
- Полный цикл обработки обновлений
- Взаимодействие фильтров и обработчиков
- Композиция фильтров
- Жизненный цикл обработчиков
- Интеграция компонентов
8. TestHelpers (Вспомогательные утилиты)
Файл: TestHelpers/TestUtilities.cs
Парадигмы тестирования:
- Test Utilities - создание вспомогательных методов для тестов
- Test Data Builders - построители тестовых данных
- Mock Factories - фабрики моков
- Test Fixtures - фикстуры для тестов
- Test Helpers - вспомогательные классы для тестирования
Что предоставляется:
- Утилиты для создания тестовых данных
- Фабрики моков
- Вспомогательные классы
- Тестовые обработчики
Основные принципы тестирования
1. AAA (Arrange-Act-Assert)
[Fact]
public void TestExample()
{
// Arrange - подготовка тестовых данных
var filter = Filter<Update>.Any();
var context = TestUtilities.CreateFilterContext();
// Act - выполнение тестируемого действия
var result = filter.CanPass(context);
// Assert - проверка результата
result.Should().BeTrue();
}
2. Тестирование граничных случаев
[Theory]
[InlineData(-1)]
[InlineData(1)]
[InlineData(100)]
public void TestBoundaryConditions(int invalidIndex)
{
// Тестируем граничные случаи
}
3. Использование моков
[Fact]
public void TestWithMocks()
{
// Arrange
var mockClient = new Mock<ITelegramBotClient>();
var mockContainer = TestUtilities.CreateMockHandlerContainer();
// Act & Assert
// Тестирование с моками
}
4. Тестирование исключений
[Fact]
public void TestExceptions()
{
// Act & Assert
Action action = () => { /* код, который должен выбросить исключение */ };
action.Should().Throw<ArgumentException>();
}
Запуск тестов
Через командную строку
dotnet test
Через Visual Studio
- Откройте Test Explorer
- Запустите все тесты или выберите конкретные
Через Rider
- Откройте Unit Tests window
- Запустите тесты
Покрытие кода
Для анализа покрытия кода используйте:
dotnet test --collect:"XPlat Code Coverage"
Рекомендации по написанию тестов
- Именование тестов должно быть описательным и следовать паттерну
MethodName_Scenario_ExpectedResult - Каждый тест должен тестировать только одну вещь
- Используйте моки для изоляции зависимостей
- Тестируйте как позитивные, так и негативные сценарии
- Группируйте связанные тесты в отдельные классы
- Используйте вспомогательные методы для создания тестовых данных
- Документируйте сложные тесты с помощью комментариев