2) "Treat warnings as errors"

Prendre quelques instants pour découvrir la page Treat warnings as errors.

Step 2 - "Treat warnings as errors"

Configurer la compilation

Pour ce faire nous avons 2 options.

Ligne de commande

On peut spécifier à dotnet de traiter les warnings comme erreur de compilation via la ligne de commande suivante :

On a dès lors 7 erreurs de compilation :

Erreurs de compilation

Le problème ici, c'est que cette ligne de commande n'est pas partagée entre tous les devs travaillant sur le système :

  • IDE Build

  • Continuous Integration

Ainsi, la volonté de traiter tous les warnings comme des erreurs peut être facilement "oubliée" en compilant via son IDE ou en omettant de spécifier l'argument passer ici.

On va dès lors privilégier l'option ci-dessous qui permet de partager la configuration de compilation quelque soit la manière de faire.

Configurer nos projets

Pour configurer chaque projet on peut éditer le fichier csproj à la main et y ajouter :

Ou le configurer via notre IDE :

Configurer la compilation

Jeu des 7 erreurs

On doit maintenant résoudre les 7 erreurs. On commence par le projet du code de production Bouchonnois.

Bouchonnois

Erreurs du Bouchonnois

Nous avons plusieurs options pour résoudre les erreurs de compilation comme présenté par Rider :

Ici, nous allons privilégier l'initialisation de la propriété par le constructeur.

Cela permet de :

  • Renforcer l'encapsulation

    • Si nous n'avons pas besoin d'exposer le champ Nom de manière public nous pourrons le rendre private

  • Forcer / exposer ce qui est requis lors de l'instantiation de nos objets

  • Renforcer les règles métiers

    • Initialiser des valeurs par défaut (Status par exemple) depuis le constructeur

    • Ne plus "diluer" cette responsabilité dans le système

On va pouvoir se laisser driver par notre compilateur à chaque modification.

On va également pouvoir renforcer l'encapsulation et rendre des champs init-only :

Renforcer l'encapsulation

On va améliorer la qualité du code en même temps :

Fixer les tests

Après les modifications sur le projet de production, on doit fixer les tests -> l'instantiation des objets du Domain.

En essayant de corriger les tests on se rend compte qu'on a besoin d'un nouveau constructeur... ou d'une manière simple d'ajouter des chasseurs / events dans la PartieDeChasse. Pour le moment et afin de pouvoir compiler, nous allons créer un nouveau constructeur.

A la fin notre classe PartieDeChasse ressemble à celà:

Nouveau rapport SonarCloud disponible ici.

Reflect

  • Comment aurait-on pu faire en sorte que les tests soient moins résistants aux refactorings du code de prod ?

  • Quelles autres problèmes avions nous identifier et devrions nous corriger avant d'aller plus loin ?

Last updated

Was this helpful?