Добавьте файлы проекта.
This commit is contained in:
@@ -0,0 +1,232 @@
|
||||
# Тесты для 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)
|
||||
```csharp
|
||||
[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. Тестирование граничных случаев
|
||||
```csharp
|
||||
[Theory]
|
||||
[InlineData(-1)]
|
||||
[InlineData(1)]
|
||||
[InlineData(100)]
|
||||
public void TestBoundaryConditions(int invalidIndex)
|
||||
{
|
||||
// Тестируем граничные случаи
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Использование моков
|
||||
```csharp
|
||||
[Fact]
|
||||
public void TestWithMocks()
|
||||
{
|
||||
// Arrange
|
||||
var mockClient = new Mock<ITelegramBotClient>();
|
||||
var mockContainer = TestUtilities.CreateMockHandlerContainer();
|
||||
|
||||
// Act & Assert
|
||||
// Тестирование с моками
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Тестирование исключений
|
||||
```csharp
|
||||
[Fact]
|
||||
public void TestExceptions()
|
||||
{
|
||||
// Act & Assert
|
||||
Action action = () => { /* код, который должен выбросить исключение */ };
|
||||
action.Should().Throw<ArgumentException>();
|
||||
}
|
||||
```
|
||||
|
||||
## Запуск тестов
|
||||
|
||||
### Через командную строку
|
||||
```bash
|
||||
dotnet test
|
||||
```
|
||||
|
||||
### Через Visual Studio
|
||||
1. Откройте Test Explorer
|
||||
2. Запустите все тесты или выберите конкретные
|
||||
|
||||
### Через Rider
|
||||
1. Откройте Unit Tests window
|
||||
2. Запустите тесты
|
||||
|
||||
## Покрытие кода
|
||||
|
||||
Для анализа покрытия кода используйте:
|
||||
```bash
|
||||
dotnet test --collect:"XPlat Code Coverage"
|
||||
```
|
||||
|
||||
## Рекомендации по написанию тестов
|
||||
|
||||
1. **Именование тестов** должно быть описательным и следовать паттерну `MethodName_Scenario_ExpectedResult`
|
||||
2. **Каждый тест** должен тестировать только одну вещь
|
||||
3. **Используйте моки** для изоляции зависимостей
|
||||
4. **Тестируйте как позитивные, так и негативные сценарии**
|
||||
5. **Группируйте связанные тесты** в отдельные классы
|
||||
6. **Используйте вспомогательные методы** для создания тестовых данных
|
||||
7. **Документируйте сложные тесты** с помощью комментариев
|
||||
|
||||
## Полезные ссылки
|
||||
|
||||
- [xUnit Documentation](https://xunit.net/)
|
||||
- [Moq Documentation](https://github.com/moq/moq4)
|
||||
- [FluentAssertions Documentation](https://fluentassertions.com/)
|
||||
- [.NET Testing Best Practices](https://docs.microsoft.com/en-us/dotnet/core/testing/)
|
||||
Reference in New Issue
Block a user