From de465e76c2c3afe33a769b6ba0ca5bee4a4f04d6 Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Sat, 25 May 2024 20:12:14 +0200 Subject: [PATCH] Correction code smells et tests unitaires --- Sources/CoreLibrary/Manager/Manager.cs | 5 +- Sources/UnitTesting/JoueurBuilderUT.cs | 23 +++++ Sources/UnitTesting/JoueurUT.cs | 15 +++ Sources/UnitTesting/ManagerUT.cs | 16 ++++ Sources/UnitTesting/ReglesClassiquesUT.cs | 107 ++++++++++++++++++++++ Sources/UnitTesting/StubUT.cs | 21 +++++ 6 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 Sources/UnitTesting/JoueurBuilderUT.cs create mode 100644 Sources/UnitTesting/ManagerUT.cs create mode 100644 Sources/UnitTesting/StubUT.cs diff --git a/Sources/CoreLibrary/Manager/Manager.cs b/Sources/CoreLibrary/Manager/Manager.cs index b853e8a..b82115c 100644 --- a/Sources/CoreLibrary/Manager/Manager.cs +++ b/Sources/CoreLibrary/Manager/Manager.cs @@ -1,11 +1,10 @@ using CoreLibrary.Joueurs; -using CoreLibrary.Regles; namespace CoreLibrary.Manager { public class Manager : IDisposable { - IPersistanceManager persistance; + private readonly IPersistanceManager persistance; private readonly IEnumerable joueurs; public IEnumerable Joueurs => joueurs; @@ -19,6 +18,8 @@ namespace CoreLibrary.Manager public void Dispose() { persistance.Enregistrer(joueurs); + + GC.SuppressFinalize(this); } } } diff --git a/Sources/UnitTesting/JoueurBuilderUT.cs b/Sources/UnitTesting/JoueurBuilderUT.cs new file mode 100644 index 0000000..f6e90db --- /dev/null +++ b/Sources/UnitTesting/JoueurBuilderUT.cs @@ -0,0 +1,23 @@ +using CoreLibrary.Events; +using CoreLibrary.Joueurs; +using Xunit; + +namespace UnitTesting +{ + public class JoueurBuilderUT + { + [Fact] + public void JoueurBuilderTest() + { + string nom = "Céleste"; + string? nomEvenement = ""; + + JoueurBuilder builder = new JoueurBuilder(); + builder.ConstruireJoueur += (Object? sender, ConstruireJoueurEventArgs e) => nomEvenement = e.Nom; + + builder.Nom(nom); + + Assert.Equal(nom, nomEvenement); + } + } +} diff --git a/Sources/UnitTesting/JoueurUT.cs b/Sources/UnitTesting/JoueurUT.cs index 147f3ee..cd899e0 100644 --- a/Sources/UnitTesting/JoueurUT.cs +++ b/Sources/UnitTesting/JoueurUT.cs @@ -1,4 +1,5 @@ using CoreLibrary.Core; +using CoreLibrary.Events; using CoreLibrary.Joueurs; using Xunit; @@ -40,5 +41,19 @@ namespace UnitTesting Assert.Equal(nbPartiePerdue, joueur.NbPartiePerdue); } + [Fact] + public void TestEvenement() + { + Code code = new Code([new Jeton(Couleur.ROUGE), new Jeton(Couleur.BLEU), new Jeton(Couleur.JAUNE), new Jeton(Couleur.VERT)]); + Code? codeEvenement = null; + + Joueur j = new Joueur("Céleste"); + j.JouerCode += (Object? sender, JouerCodeEventArgs e) => codeEvenement = e.Code; + + j.Code(code); + + Assert.NotNull(codeEvenement); + Assert.Equal(code, codeEvenement); + } } } diff --git a/Sources/UnitTesting/ManagerUT.cs b/Sources/UnitTesting/ManagerUT.cs new file mode 100644 index 0000000..082088c --- /dev/null +++ b/Sources/UnitTesting/ManagerUT.cs @@ -0,0 +1,16 @@ +using CoreLibrary.Manager; +using Xunit; + +namespace UnitTesting +{ + public class ManagerUT + { + [Fact] + public void TestConstruteur() + { + Manager manager = new Manager(new Stub()); + Assert.NotNull(manager.Joueurs); + Assert.NotEmpty(manager.Joueurs); + } + } +} diff --git a/Sources/UnitTesting/ReglesClassiquesUT.cs b/Sources/UnitTesting/ReglesClassiquesUT.cs index b58aa1c..030c8b4 100644 --- a/Sources/UnitTesting/ReglesClassiquesUT.cs +++ b/Sources/UnitTesting/ReglesClassiquesUT.cs @@ -16,6 +16,25 @@ namespace UnitTesting Assert.Equal("Règles classiques", new ReglesClassiques().Nom); } + [Fact] + public void TestNbJoueur() + { + ReglesClassiques regles = new ReglesClassiques(); + Assert.Equal(0, regles.NbJoueurs); + regles.AjouterJoueur("Bonjour"); + Assert.Equal(1, regles.NbJoueurs); + regles.AjouterJoueur("Bonsoir"); + Assert.Equal(2, regles.NbJoueurs); + } + + [Fact] + public void GenererCode() + { + ReglesClassiques regles = new ReglesClassiques(); + Assert.Equal(new Code(4).NbJetons, regles.GenererCode().NbJetons); + Assert.Equal(4, regles.GenererCode().TailleMaximale()); + } + [Fact] public void TestJoueurCourantPartieNonCommencee() { @@ -145,5 +164,93 @@ namespace UnitTesting Assert.Single(gagnants); Assert.Contains(regles.JoueurCourant().Item1, gagnants); } + + [Fact] + public void TestPerdants() + { + ReglesClassiques regles = new ReglesClassiques(); + Partie partie = new Partie(regles); + + regles.AjouterJoueur("joueur1"); + regles.AjouterJoueur("joueur2"); + + regles.CommencerLaPartie(); + + Plateau plateauj1 = regles.JoueurCourant().Item2; + + Type type = typeof(Plateau); + FieldInfo? fieldInfo = type.GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(fieldInfo); + Code? codeSecret = (Code?)fieldInfo.GetValue(plateauj1); + Assert.NotNull(codeSecret); + + regles.JoueurCourant().Item2.AjouterCode(codeSecret); + + regles.PasserLaMain(); + + IEnumerable perdants = regles.Perdants(); + Assert.Single(perdants); + Assert.Contains(regles.JoueurCourant().Item1, perdants); + } + + + [Fact] + public void EstTermineeMaxTour() + { + ReglesClassiques regles = new ReglesClassiques(); + regles.AjouterJoueur("1"); + regles.AjouterJoueur("2"); + regles.CommencerLaPartie(); + + for (int i = 0; i < 24; ++i) + { + Plateau plateau = regles.JoueurCourant().Item2; + Code code = new Code(4); + code.AjouterJeton(new Jeton(Couleur.ROUGE)); + code.AjouterJeton(new Jeton(Couleur.ROUGE)); + code.AjouterJeton(new Jeton(Couleur.ROUGE)); + code.AjouterJeton(new Jeton(Couleur.ROUGE)); + plateau.AjouterCode(code); + + regles.PasserLaMain(); + } + + Assert.True(regles.EstTerminee()); + } + + [Fact] + public void EstTermineeNon() + { + ReglesClassiques regles = new ReglesClassiques(); + regles.AjouterJoueur("1"); + regles.AjouterJoueur("2"); + regles.CommencerLaPartie(); + + for (int i = 0; i < 12; ++i) + regles.PasserLaMain(); + + Assert.False(regles.EstTerminee()); + } + + [Fact] + public void EstTermineeCodeTrouve() + { + ReglesClassiques regles = new ReglesClassiques(); + regles.AjouterJoueur("1"); + regles.AjouterJoueur("2"); + regles.CommencerLaPartie(); + + Plateau plateauj1 = regles.JoueurCourant().Item2; + + Type type = typeof(Plateau); + FieldInfo? fieldInfo = type.GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(fieldInfo); + Code? codeSecret = (Code?)fieldInfo.GetValue(plateauj1); + Assert.NotNull(codeSecret); + + regles.JoueurCourant().Item2.AjouterCode(codeSecret); + + Assert.True(regles.EstTerminee()); + } } } diff --git a/Sources/UnitTesting/StubUT.cs b/Sources/UnitTesting/StubUT.cs new file mode 100644 index 0000000..bfdcea5 --- /dev/null +++ b/Sources/UnitTesting/StubUT.cs @@ -0,0 +1,21 @@ +using CoreLibrary.Manager; +using Xunit; + +namespace UnitTesting +{ + public class StubUT + { + [Fact] + public void ChargerTest() + { + Assert.NotEmpty(new Stub().Charger()); + } + + [Fact] + public void EnregistrerTest() + { + new Stub().Enregistrer([]); + } + + } +}