Temps estimé: 20 minutes
Exercice « time trial » sur les tests unitaires
Pourquoi des exercices de type « time trial » ?
Nous avons remarqué que les étudiants comprennent la matière, mais aux examens, le temps passe vite et ils n'arrivent pas à terminer les questions de code. Le problème n'est pas leur compréhension, mais leur vitesse d'exécution. Nous avons donc monté ces exercices pour développer votre capacité à taper du code, refactorer et naviguer dans l'IDE naturellement et rapidement. Chaque exercice a trois objectifs de temps : or, argent et bronze. Le but n'est pas de bâcler le travail pour aller vite, mais de développer les réflexes vous permettant d'écrire du bon code rapidement. Nous allons aussi inclure des raccourcis IntelliJ pratiques qui amélioreront votre productivité en programmation.
Désactivation de Copilot
Pour ces exercices, nous demandons de désactiver GitHub Copilot pour que vous développiez vos propres réflexes de programmation. Quand Copilot suggère du code automatiquement, vous ne développez pas votre mémoire des patterns de base et vous restez dépendant de l'outil. Vous lisez rapidement les propositions et avez tendance à faire confiance à ce qu'il vous suggère sans le remettre en question et nous savons tous qu'il lui arrive très souvent de se tromper. En écrivant le code vous-même, vous mémorisez mieux la syntaxe et vous devenez plus fluide. Taper le code manuellement améliorera votre vitesse de frappe et votre familiarité avec les raccourcis clavier. L'objectif est de créer cette rapidité naturelle qui vous servira aux examens. C'est la différence entre quelqu'un qui hésite à chaque ligne et quelqu'un qui code de façon instinctive.
Voici comment désactiver Copilot dans IntelliJ
- Dans IntelliJ, allez dans
File→Settings(ouIntelliJ→Preferencessur macOS) - Recherchez
Copilotdans la barre de recherche - Décochez l'option
Enable GitHub Copilot - Cliquez sur
OK - IntelliJ vous proposera probablement de redémarrer pour appliquer les changements N'oubliez pas de le réactiver ensuite puisqu'il demeure très utile!
Exercice One Click Buy
Repository
Faire un clone local de ce dépôt Github :
git clone https://github.com/GLO4002UL/officiel-one-click-buyTarget
- 🥇 Or: 10 minutes
- 🥈 Argent: 15 minutes
- 🥉 Bronze: 20 minutes
L'objectif de cet exercice est de tester la classe StartByTestingThis en utilisant le TDD.
Vous devez tester et implémenter chaque comportement en parallèle, comme le veut le TDD.
Le comportement attendu de la méthode oneClickBuy est indiqué en commentaire et le fichier de test
StartByTestingThisTest a déjà été créé pour que vous y ajoutiez vos tests.
Assurez-vous que votre implémentation respecte tous les principes vus dans le cours (SOLID+T, clean code, etc.)
Note importante: Vous n'avez pas le droit de modifier les classes se trouvant dans le dossier do_no_edit,
mais vous pouvez modifier Cart et Product.
public class StartByTestingThis {
public Invoice oneClickBuy(String clientEmail, String productSku) {
// Étape 1 : Créer le cart avec le CartFactory
// Étape 2 : Trouver le produit avec le ProductRepository
// Étape 3 : Ajouter le produit au cart
// Étape 4 : Pour chaque item du cart, ajouter une ligne sur l'invoice
// Étape 5 : Retourner l'invoice
return null;
}
}Petit rappel des 3 règles du TDD
- You are not allowed to write any production code unless it is to make a failing test pass
- Vous devez écrire un test qui échoue avant de pouvoir écrire le code de production correspondant.
- You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures
- Vous devez écrire une seule assertion à la fois, qui fait échouer le test ou qui échoue à la compilation.
- You are not allowed to write any more than is sufficient to pass the one failing unit test
- Vous devez écrire le minimum de code de production pour que l’assertion du test actuellement en échec soit satisfaite.
Utilisation de JUnit
Tel que vu dans le cours, il y a plusieurs bonnes façons de nommer un test.
On utilise givenX_whenY_thenZ ici comme exemple, mais ce n'est pas la seule façon de faire.
L'important, c'est de se trouver une convention en équipe et de la respecter partout.
// Pour qu'une méthode soit considérée comme un test, vous devez ajouter @Test au-dessus
@Test
public void givenOrderExists_whenPayOrder_thenOrderMarkAsPaid() {
// ...
}
// Pour définir une méthode qui doit être exécutée au début de chaque test, vous devez ajouter @BeforeEach au-dessus
@BeforeEach
public void setup() {
// ...
}Utilisation de Mockito
Vous devrez installer le module mockito-junit-jupiter afin de pouvoir configurer vos tests comme il l'est démontré ci-dessous.
// Pour définir un Mock, vous devez utiliser l'attribut `@Mock` de Mockito au-dessus de la propriété et ajouter
// @ExtendsWith au-dessus de votre classe.
@ExtendWith(MockitoExtension.class)
public class MyTestClass {
// Pour définir le mock, il y a deux méthodes
// Première méthode: utilisation de l'attribut @Mock
@Mock
Order order;
// Deuxième méthode: en l'initialisant dans setup()
@BeforeEach
public void setup() {
order = mock(Order.class);
}
}
// Configuration d'un mock pour que sa méthode retourne une valeur spécifique.
given(orderRepository.findById(anyString())).willReturn(order);
// OU
willReturn(order).given(orderRepository).findById(anyString());
// Vous pouvez choisir celui que vous préférez tant que vous conservez la même manière de faire partout!
// Vérification qu'une méthode du mock a été appelée avec une valeur spécifique.
verify(orderRepository).findById(order.id);Raccourcis clavier intéressants
Nous vous conseillons fortement d'essayer tous les raccourcis clavier suivants. Ces raccourcis vous aideront à développer de la rapidité lorsque vous naviguez le code ou lorsque vous en écrivez.
Vous trouverez ci-dessous les raccourcis pour le keymap Windows et pour celui Visual Studio, mais vous n'êtes pas
obligés d'utiliser ceux-ci. À vous de voir lequel vous semble le plus intuitif!
Pour voir quel est votre keymap ou le modifier :
- Allez dans
File→Settings(ouIntelliJ→Preferencessur macOS) - Cliquez sur
Keymap - Sélectionnez le keymap que vous désirez :
Visual Studio,Windowsou autre - Cliquez sur
OK
Vous pouvez aussi changer le raccourci clavier de toutes les actions à partir de ce menu. Vous pouvez donc créer votre propre keymap custom!
Raccourcis communs au keymap Windows et Visual Studio
Ctrl + Click: Permet de voir le contenu d'une classeAlt + Enter: Permet d'afficher les suggestions de corrections rapides. Vous pouvez ensuite faireEnterà nouveau pour sélectionner la première suggestion. Il est très utile pour les imports manquants.Ctrl + F: Permet de chercher du texte dans le fichier actuelCtrl + Shift + F: Permet de chercher du texte dans l'entièreté du projetShift + Shift: Permet de chercher n'importe quoi dans IntelliJ : fichier, classe, setting, méthode, variable, etc.
Raccourcis propres au keymap Windows
Ctrl + N: Permet de trouver une classeCtrl + Shift + T: Lorsqu'on se trouve dans un test, permet de se rendre à la méthode visée par le test. À l'inverse, si on se trouve dans une méthode, permet de se rendre à la classe de testCtrl + Alt + M: Permet d'extraire les lignes de code sélectionnées dans une méthode (utile pour isoler le code répétitif des tests dans une méthode setup)
Raccourcis propres au keymap Visual Studio
Ctrl + T: Permet de trouver une classeCtrl + R + M: Permet d'extraire les lignes de code sélectionnées dans une méthode (utile pour isoler le code répétitif des tests dans une méthode setup)