2 mai 2020
Le but de cet exercice est, dans un premier temps, de manipuler les vecteurs de la STL. Puis, vous utiliserez le framework GoogleTest pour faire les tests unitaires.
Nous supposons qu’il y a une partie de coinche en cours entre deux joueurs : vous et l’ordinateur. L’idée est de savoir, pour une configuration donnée (c’est-à-dire une carte jouée par votre adversaire et les cartes de votre main), si vous allez prendre le pli ou pas. Pour ceux qui ne connaissent pas du tout la coinche, commencez par lire la section 2.4.
Les règles de notre jeu de coinche simplifié sont les suivantes:
Le but n’est pas de savoir qui gagne la partie. L’idée est de partir d’une configuration de base, c’est-à-dire une carte jouée et 8 cartes dans votre main et de savoir qui prend le pli. Ce qui signifie qu’il y aura un seul tour (et donc que vous ne jouerez pas vos 8 cartes).
Les étapes du jeu sont les suivantes :
Commencez par créer un projet Console que vous appellerez Coinche. Un fichier Coinche.h vous est fourni ici. Vous pouvez l’étendre, mais pas modifier les prototypes des fonctions. Pour information, afin d’ajouter un fichier Coinche.h
à votre projet Coinche, il suffit de faire un clic droit sur le projet Coinche (au niveau de l’explorateur de solution) -> add -> new item -> header file et donnez Coinche.h
en nom. Copier les prototypes de fonctions et ce que vous jugez nécessaires dans ce fichier
Afin de représenter le jeu de cartes, vous utiliserez un vecteur. Chaque case du vecteur est une carte représentée par une structure. La structure est composée de :
Règle de la coinche (l’explication pour 2 joueurs seulement) :
Dans cette section, nous allons mettre en oeuvre des tests unitaires.
C:\users\votre_login\CSC4526
).cmake
de ce document.Cette section décrit l’environnement mis en place par cmake
:
CoincheAvecGoogleTest\CMakeLists.txt
déclare les 3 répertoires src
, unitTests
et mainLauncher
dont nous nous servirons pour le codage de l’exercice.
Le répertoire src
contient tous les sources (.h
et .cpp
) de notre application. CoincheAvecGoogleTest\src\CMakeLists.txt
permet d’indiquer que nous utiliserons tous ces sources (définition et initialisation de la variable SOURCES
par l’instruction (GLOB... CONFIGURE_DEPENDS...)
et son utilisation dans l’instruction add_library()
) pour générer la bibliothèque statique src
(instruction add_library()
). L’inclusion des fichiers sources par d’autres projets est rendue possible par l’(instruction target_include_directories
). Le répertoire src
ne contient pas de fichier codant la fonction C++ main()
, mais un fichier myMain.h
contenant la déclaration de la fonction myMain()
et un fichier myMain.cpp
contenant sa définition.
// Fichier myMain.h
#pragma once
int monMain();
#+END_SRC
#+BEGIN_SRC CPP
// Fichier myMain.cpp
#include "monMain.h"
int monMain()
{
// Inserer ici le code a appeler par myMain(). NB : rien a faire pour le present exercice.
return 0;
}
Le répertoire unitTests
contient les tests unitaires. Dans ce répertoire, vous n’aurez besoin que de modifier unitTests.cpp
. Après avoir été téléchargé GoogleTest CoincheAvecGoogleTest\unitTests\CMakeLists.txt
définit cet environnement de tests avec les instructionss add_executable()
et add_test()
. De plus, il indique que l’exécutable unitTests
est contruit à l’aide des bibliothèques gtest
, gtest_main
et src
(cf. les deux instructions target_link_libraries()
). Notez que :
target_link_libraries()
permettent également d’indiquer à cmake qu’il doit générer les directives pour que le compilateur puisse retrouver les fichier d’include de googletest
et src
.gtest_main
contient une fonction main()
. C’est pourquoi nous avons sorti la fonction main()
des fichiers sources de src
. Ainsi, au moment de l’édition de liens entre les bibliothèques de GoogleTest et la bibliothèque src
, nous avons bien une seule fonction main()
.Le répertoire mainLauncher
contient le fichier mainLauncher.cpp
. Ce fichier définit une fonction main()
qui est chargé d’appeler la fonction myMain()
. Grâce à l’instruction add_executable
, CoincheAvecGoogleTest\unitTests\CMakeLists.txt
spécifie la génération de l’exécutable mainLauncher
en utilisant la bibliothèque src
(cf. instruction target_link_libraries
), src
contenant la définition de la fonction myMain()
.
// Fichier mainLauncher.cpp
#include "myMain.h"
int main()
{
return myMain();
}
L’exécution de la commande cmake
dans le répertoire build
permet de configurer les différents projets /Visual Studio/ de votre application en configurant correctement les chemins d’accès aux répertoires d’include et aux bibliothèques utilisés.
Créez Coinche.h
et Coinche.cpp
dans le répertoire src
. Recopiez dans ces fichiers le contenu des fichiers de votre projet Coinche initial.
Dans Coinche.cpp
, renommez main()
en myMain()
.
Dans l’explorateur de solutions, cliquez droit sur mainLauncher
, puis sélectionnez “Définir comme projet par défaut”. Ensuite, exécutez votre application et vérifier qu’elle fonctionn comme précédemment.
Mettez à jour le fichier unitTests\unitTests.cpp
avec quelques tests, comme l’exemple de test suivant :
/* Test : la valeur du 9 d'atout est 14*/
TEST(TestAtout, TestUpdate9Atout)
{
card played;
std::vector<card> jeu(1);
std::vector<card> deck(0);
Couleur atout = pique;
jeu[0].force = neuf;
jeu[0].value = 0;
jeu[0].couleur = pique;
update_values(atout, deck, jeu);
EXPECT_EQ(14, jeu[0].value);
}