Skip to content

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 StatisticsService

Technologies 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

  1. Ouvrir l'Explorateur de tests (Test > Test Explorer)
  2. Cliquer sur "Run All" ou sélectionner des tests spécifiques

Depuis VS Code

  1. Installer l'extension ".NET Core Test Explorer"
  2. 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

  1. Nommage des tests : Method_Scenario_ExpectedBehavior
  2. Structure AAA : Arrange, Act, Assert
  3. Un test = un comportement
  4. Tests d'intégration vs unitaires : Ce projet contient uniquement des tests unitaires

Ajout de nouveaux tests

Pour ajouter de nouveaux tests :

  1. Créer une nouvelle classe de tests dans le dossier approprié
  2. Hériter de IDisposable si des ressources doivent être libérées
  3. 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();
    }
}

Documentation Technique