Thème
FireSupervisor Backend Tests
Ce projet contient les tests unitaires pour le backend FireSupervisor.
Structure des tests
backend.tests/
├── Domain/
│ ├── Entities/
│ │ ├── ZoneTests.cs # Tests pour l'entité Zone
│ │ ├── UserTests.cs # Tests pour l'entité User
│ │ ├── BuildingMapTests.cs # Tests pour l'entité BuildingMap
│ │ ├── GlobalConfigurationTests.cs # Tests pour GlobalConfiguration
│ │ ├── PanelPointConfigTests.cs # Tests pour PanelPointConfig
│ │ └── SystemLogTests.cs # Tests pour SystemLog
│ ├── Models/
│ │ └── FirePanelTests.cs # Tests pour le modèle FirePanel
│ └── ValueObjects/
│ ├── IpAddressTests.cs # Tests pour le ValueObject IpAddress
│ ├── PortTests.cs # Tests pour le ValueObject Port
│ └── ModbusProfileTests.cs # Tests pour le ValueObject ModbusProfile
└── Application/
├── DTOs/
│ ├── PanelDtoTests.cs # Tests pour les DTOs Panel
│ ├── LogDtoTests.cs # Tests pour LogDto
│ ├── PanelSnapshotTests.cs # Tests pour PanelSnapshot
│ ├── ReportFilterDtoTests.cs # Tests pour ReportFilterDto
│ └── StatisticsDtoTests.cs # Tests pour StatisticsDto
└── Services/
├── AuthServiceTests.cs # Tests pour AuthService
├── InisConfigParserTests.cs # Tests pour InisConfigParser
├── AuditLogServiceTests.cs # Tests pour AuditLogService
└── StatisticsServiceTests.cs # Tests pour StatisticsServiceTechnologies utilisées
- xUnit - Framework de tests
- FluentAssertions - Assertions plus lisibles
- Moq - Mocking framework
- EntityFrameworkCore.InMemory - Base de données en mémoire pour les tests
Exécution des tests
Depuis la ligne de commande
bash
# Exécuter tous les tests
dotnet test backend.tests/backend.tests.csproj
# Avec verbosité
dotnet test backend.tests/backend.tests.csproj --verbosity normal
# Exécuter une classe de tests spécifique
dotnet test backend.tests/backend.tests.csproj --filter "FullyQualifiedName~FirePanelTests"
# Exécuter un test spécifique
dotnet test backend.tests/backend.tests.csproj --filter "FullyQualifiedName~Constructor_WithValidParameters_ShouldCreatePanel"Depuis Visual Studio
- Ouvrir l'Explorateur de tests (Test > Test Explorer)
- Cliquer sur "Run All" ou sélectionner des tests spécifiques
Depuis VS Code
- Installer l'extension ".NET Core Test Explorer"
- Les tests apparaissent dans le panneau de tests
Couverture des tests
Les tests couvrent les domaines suivants :
Domain Layer
ValueObjects : IpAddress, Port, ModbusProfile
- Validation des entrées
- Égalité des records
- Conversions implicites/explicites
Entities : Zone, User, BuildingMap, GlobalConfiguration, PanelPointConfig, SystemLog
- Création et valeurs par défaut
- Mise à jour d'état
- Lifecycle des événements
- Configuration des plans et points
Models : FirePanel
- Construction et configuration
- Gestion des zones et points
- États de connexion et alarmes
- Calcul des états globaux (GeneralFire, GeneralFault)
Application Layer
Services : AuthService, InisConfigParser, AuditLogService, StatisticsService
- Authentification et tokens JWT
- Refresh tokens
- Parsing XML de configuration INIS
- Journalisation des événements
- Calcul des statistiques et métriques
DTOs : PanelDto, LogDto, PanelSnapshot, ReportFilterDto, StatisticsDto
- Mapping depuis les modèles du domaine
- Calcul des statuts globaux
- Filtrage des rapports
- Snapshots de l'état des panneaux
Bonnes pratiques
- Nommage des tests :
Method_Scenario_ExpectedBehavior - Structure AAA : Arrange, Act, Assert
- Un test = un comportement
- Tests d'intégration vs unitaires : Ce projet contient uniquement des tests unitaires
Ajout de nouveaux tests
Pour ajouter de nouveaux tests :
- Créer une nouvelle classe de tests dans le dossier approprié
- Hériter de
IDisposablesi des ressources doivent être libérées - Utiliser les attributs
[Fact]pour les tests simples et[Theory]pour les tests paramétrés
Exemple :
csharp
public class MyServiceTests : IDisposable
{
private readonly MyService _service;
public MyServiceTests()
{
// Setup
_service = new MyService();
}
public void Dispose()
{
// Cleanup
}
[Fact]
public void Method_WhenCondition_ShouldExpectedResult()
{
// Arrange
var input = "test";
// Act
var result = _service.Method(input);
// Assert
result.Should().BeTrue();
}
}