2019_2020:s3:concprogobjet:td:td6
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
2019_2020:s3:concprogobjet:td:td6 [2019/11/02 17:46] – [Partie 1 : Tutoriel EasyMock (1h grand maximum)] blay | 2019_2020:s3:concprogobjet:td:td6 [2019/11/06 12:40] (current) – [Partie 1 : Tutoriel EasyMock (1h grand maximum)] blay | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Tests d' | + | ====== Tests d' |
Ce TD vise | Ce TD vise | ||
- à vous apprendre à mettre en place des tests d' | - à vous apprendre à mettre en place des tests d' | ||
- à concevoir une petite application à plusieurs en prévoyant les tests d' | - à concevoir une petite application à plusieurs en prévoyant les tests d' | ||
+ | /* | ||
<note important> | <note important> | ||
Vous ne parviendrez peut etre pas à tout faire. | Vous ne parviendrez peut etre pas à tout faire. | ||
Line 9: | Line 10: | ||
- Ne trainez pas non plus ! | - Ne trainez pas non plus ! | ||
</ | </ | ||
+ | */ | ||
===== Partie 1 : Tutoriel EasyMock (1h grand maximum) ===== | ===== Partie 1 : Tutoriel EasyMock (1h grand maximum) ===== | ||
Line 15: | Line 17: | ||
- Voici le .jar dont vous avez besoin pour avoir accès à l' | - Voici le .jar dont vous avez besoin pour avoir accès à l' | ||
- | - Pour l' | + | - Créer un projet java |
- | - Voici l' | + | - Ajouter |
+ | - Voici l' | ||
public interface Collaborator { | public interface Collaborator { | ||
Line 103: | Line 106: | ||
Unexpected method call Collaborator.documentRemoved(" | Unexpected method call Collaborator.documentRemoved(" | ||
</ | </ | ||
- | - Ajoutez un test cette fois-ci juste : On déclare le message que doit recevoir le mock <code java> | + | - Ajoutez un test, cette fois-ci juste : |
+ | - On déclare le message que doit recevoir le mock (7.a) | ||
+ | - On enregistre (7.b) | ||
+ | - On lance le test sur notre code (7.c) | ||
+ | - On explicite la vérification (réalisée par défaut) (7.d) <code java> | ||
public void testRemoveNonExistingDocument2() { | public void testRemoveNonExistingDocument2() { | ||
- | mock.documentRemoved(" | + | mock.documentRemoved(" |
- | replay(mock); | + | replay(mock); |
- | classUnderTest.removeDocument(" | + | classUnderTest.removeDocument(" |
- | verify(mock); | + | verify(mock); |
} | } | ||
</ | </ | ||
+ | - Ajoutez un test, mais cette fois-ci nous explicitons la valeur de retour attendue et nous créons deux mocks pour nous assurer qu'il n'y a pas d' | ||
+ | @Test | ||
+ | public void testAddDocument() throws AlreadyAdded { | ||
+ | // | ||
+ | Collaborator firstCollaborator = mock(Collaborator.class);// | ||
+ | Collaborator | ||
+ | classUnderTest.setListener(firstCollaborator); | ||
+ | | ||
+ | //// expect document addition | ||
+ | expect(firstCollaborator.documentAdded(" | ||
+ | replayAll(); | ||
+ | classUnderTest.addDocument(" | ||
+ | assertTrue(classUnderTest.isContained(" | ||
+ | verifyAll(); | ||
+ | } | ||
+ | </ | ||
+ | - Ajoutez un test, mais cette fois-ci nous attendons pour valeur de retour false <code java> @Test | ||
+ | public void testFailingAddDocument() throws AlreadyAdded { | ||
+ | // | ||
+ | Collaborator firstCollaborator = mock(Collaborator.class); | ||
+ | Collaborator secondCollaborator = mock(Collaborator.class); | ||
+ | classUnderTest.setListener(firstCollaborator); | ||
+ | | ||
+ | //// expect document addition | ||
+ | expect(firstCollaborator.documentAdded(" | ||
+ | replayAll(); | ||
+ | classUnderTest.addDocument(" | ||
+ | assertFalse(classUnderTest.isContained(" | ||
+ | verifyAll(); | ||
+ | } | ||
+ | </ | ||
+ | - et enfin nous testons une levée d' | ||
+ | public void testDuplicationWhenAddingDocument() throws AlreadyAdded { | ||
+ | // | ||
+ | Collaborator firstCollaborator = mock(Collaborator.class); | ||
+ | Collaborator secondCollaborator = mock(Collaborator.class); | ||
+ | classUnderTest.setListener(firstCollaborator); | ||
+ | | ||
+ | //// expect document addition | ||
+ | expect(firstCollaborator.documentAdded(" | ||
+ | replayAll(); | ||
+ | classUnderTest.addDocument(" | ||
+ | assertTrue(classUnderTest.isContained(" | ||
+ | verifyAll(); | ||
+ | }</ | ||
+ | |||
+ | Cela conclut la partie tutorielle. | ||
+ | A présent, vous devriez savoir créer vous même des tests d' | ||
+ | |||
+ | |||
===== Partie 2 : Un jeu de Quizz ===== | ===== Partie 2 : Un jeu de Quizz ===== | ||
- | Vous devez réaliser en groupe de 2 étudiants un jeu de quizz dont voici la spécification. | + | Vous devez réaliser en groupe de X étudiants un jeu de quizz dont voici la spécification. |
- | ==== Spécifications | + | ==== Spécification |
* **V0 : Version de base** | * **V0 : Version de base** | ||
- | - En tant que joueur, je veux répondre à une question du quizz <color / | + | - En tant que joueur, je veux répondre à une question du quizz |
- Si j'ai la bonne réponse je gagne 1pt | - Si j'ai la bonne réponse je gagne 1pt | ||
- Si je n'ai pas la bonne réponse, la bonne réponse m'est donnée. | - Si je n'ai pas la bonne réponse, la bonne réponse m'est donnée. | ||
Line 126: | Line 184: | ||
- " | - " | ||
- " | - " | ||
- | - En tant que joueur, je veux jouer une partie de quizz, de façon à m' | + | - En tant que joueur, je veux jouer une partie de quizz, de façon à m' |
+ | |||
+ | ==== Modélisation ==== | ||
+ | |||
+ | === Exigences === | ||
+ | Voici les interfaces qui vous sont données et que vous devez respecter. | ||
+ | <code java> | ||
+ | public interface GameInterface { | ||
+ | |||
+ | void startGame(); | ||
+ | |||
+ | boolean isNotOver(); | ||
+ | |||
+ | String nextQuestion(); | ||
+ | |||
+ | boolean setCurrentUserAnswer(String answer); | ||
+ | |||
+ | String getRightAnswer(); | ||
+ | |||
+ | int getPoints(); | ||
+ | |||
+ | } | ||
+ | </code> | ||
+ | <code java> | ||
+ | public interface QuizInterface { | ||
+ | |||
+ | public String getQuestion(int currentQuestionNumber) ; | ||
+ | |||
+ | public boolean isGoodAnswer(int currentQuestionNumber, | ||
+ | |||
+ | public String getAnswer(int currentQuestionNumber); | ||
+ | |||
+ | public int size(); | ||
+ | |||
+ | public void addQuestion(QuestionInterface q1); | ||
+ | |||
+ | } | ||
+ | </code> | ||
+ | <code java> | ||
+ | public interface QuestionInterface { | ||
+ | |||
+ | String getAnswer(); | ||
+ | |||
+ | String getQuestion(); | ||
+ | |||
+ | boolean isGoodAnswer(String answer); | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | **Voici un code pour tester un jeu.** | ||
+ | <code java> | ||
+ | package quizzPK; | ||
+ | |||
+ | import java.util.Scanner; | ||
+ | |||
+ | public class mainTestGame { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | Scanner sc = new Scanner(System.in); | ||
+ | |||
+ | QuizInterface quiz = new Quiz(); | ||
+ | QuestionInterface q1 = new Question(" | ||
+ | QuestionInterface q2 = new Question(" | ||
+ | QuestionInterface q3 = new Question(" | ||
+ | |||
+ | quiz.addQuestion(q1); | ||
+ | quiz.addQuestion(q2); | ||
+ | quiz.addQuestion(q3); | ||
+ | GameInterface game = new Game(quiz); | ||
+ | |||
+ | game.startGame(); | ||
+ | |||
+ | while (game.isNotOver()) { | ||
+ | System.out.println(game.nextQuestion() + " : ") ; | ||
+ | String answer = sc.nextLine(); | ||
+ | boolean valid = game.setCurrentUserAnswer(answer); | ||
+ | if (!valid ) { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | else | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
+ | === A Faire === | ||
+ | - **Modélisez** par groupe de 2 ou 3 étudiants, le jeu | ||
+ | - En particulier, | ||
+ | - Une fois que vous êtes d' | ||
+ | - **Développez** séparément | ||
+ | - Etudiant 1 : Développez la classe '' | ||
+ | - Tester votre classe '' | ||
+ | - Etudiant 2 : Développez la classe '' | ||
+ | - Tester votre classe '' | ||
+ | - Intégrez vos codes. | ||
+ | |||
+ | L' | ||
+ | |||
+ | |||
+ | /* | ||
+ | === Headline === | ||
+ | |||
- 10 questions sont posées au joueur | - 10 questions sont posées au joueur | ||
- Seules des questions auxquelles le joueur n'a jamais répondu juste lui sont posées. | - Seules des questions auxquelles le joueur n'a jamais répondu juste lui sont posées. | ||
Line 158: | Line 324: | ||
* V1C : Des difficultés de questions. | * V1C : Des difficultés de questions. | ||
* V1D : Persistance : les questions sont stockées dans un fichier, de même pour les parties. | * V1D : Persistance : les questions sont stockées dans un fichier, de même pour les parties. | ||
- | + | */ | |
- | ==== A faire ==== | + | /* ==== A faire ==== |
- Conception : V0 (Environ 1/2 heure intense) | - Conception : V0 (Environ 1/2 heure intense) | ||
Line 183: | Line 349: | ||
- 8-O reprendre la question précédente. | - 8-O reprendre la question précédente. | ||
- Si vous êtes ici et que vous en avez envie ajoutez une autre extension. | - Si vous êtes ici et que vous en avez envie ajoutez une autre extension. | ||
+ | */ | ||
+ | |||
+ | /* | ||
Line 197: | Line 366: | ||
</ | </ | ||
+ | */ | ||
+ | /* | ||
==== A RENDRE ==== | ==== A RENDRE ==== | ||
- Document | - Document | ||
Line 208: | Line 379: | ||
Voici le document qui sera utilisé pour l' | Voici le document qui sera utilisé pour l' | ||
+ | */ | ||
2019_2020/s3/concprogobjet/td/td6.1572716811.txt.gz · Last modified: 2019/11/02 17:46 by blay