POO Avancée & Architecture Logicielle avec C#

🧪 Module 7

Qualité Logicielle & Tests

Objectif: installer un filet de sécurité crédible avant de parler de vitesse de livraison.

POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

📝 Changelog — V0.0.1

  • Création du deck sur les tests unitaires, le mocking, AAA et l'introduction au TDD.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Pyramide de test orientée C#

POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Ce qu'on veut vraiment tester

  • Les invariants du domaine.
  • Les règles de décision de l'application.
  • Les intégrations critiques avec la persistence ou les API externes.
  • Pas les getters triviaux, ni le framework à votre place.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Le pattern AAA

[Fact]
public async Task ReserveAsync_ShouldRejectOverlap_WhenSlotAlreadyTaken()
{
    var repository = new InMemoryReservationRepository(existingReservation);
    var handler = new ReserveResourceHandler(repository, new FakeUnitOfWork(), new FakeClock());

    await Assert.ThrowsAsync<ResourceAlreadyReservedException>(() =>
        handler.HandleAsync(command, CancellationToken.None));
}
  • Arrange: contexte maîtrisé.
  • Act: une action lisible.
  • Assert: une attente précise.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Mocking raisonné

  • Moq ou NSubstitute pour isoler des dépendances externes.
  • Un mock valide une collaboration, pas une implémentation interne.
  • Trop de mocks signalent souvent une conception trop couplée.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

TDD en boucle courte

  • Red: écrire un test qui échoue pour une raison utile.
  • Green: produire l'implémentation minimale.
  • Refactor: nettoyer sans casser le comportement.

Le TDD n'est pas une religion, c'est une stratégie de feedback.

POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Organisation du dossier tests/

tests/
  Booking.Domain.Tests/
    ReservationTests.cs
  Booking.Application.Tests/
    ReserveResourceHandlerTests.cs
  Booking.Infrastructure.Tests/
    EfReservationRepositoryTests.cs
  • Le nom du projet doit indiquer clairement la couche testée.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com
POO Avancée & Architecture Logicielle avec C#

Signal de qualité attendu

  • Les tests échouent vite et lisiblement.
  • La logique métier reste testable sans base réelle.
  • Les scénarios de non-régression sont identifiés tôt.
POO Avancée & Architecture Logicielle avec C# - V0.0.2 - 11/03/2026 23:58 - Réda BOUREBABA r.bourebaba@ynov.com