Gestion d'inventaire et tests JUnit
Apprendre à utiliser les tests paramétrés de JUnit 5 pour tester différentes combinaisons de données dans le cadre d'un projet Maven.
Contenu de l'exercice
Dans cet exemple, nous allons créer une classe InventoryManager qui permet d'ajouter, supprimer et mettre à jour des articles dans l'inventaire. Les articles sont représentés par la classe InventoryItem. Nous allons utiliser des tests paramétrés pour tester différentes combinaisons de données.
Objectifs de l'exercice
Voici une implémentation possible :
Créez la classe InventoryItem:
package com.example;
public class InventoryItem {
private String name;
private int quantity;
public InventoryItem(String name, int quantity) {
this.name = name;
this.quantity = quantity;
}
public String getName() {
return name;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
@Override
public String toString() {
return "InventoryItem{" +
"name='" + name + '\'' +
", quantity=" + quantity +
'}';
}
}
Créez la classe InventoryManager:
package com.example;
import java.util.ArrayList;
import java.util.List;
public class InventoryManager {
private List<InventoryItem> inventory;
public InventoryManager() {
this.inventory = new ArrayList<>();
}
public void addItem(InventoryItem item) {
inventory.add(item);
}
public void removeItem(String itemName) {
inventory.removeIf(item -> item.getName().equals(itemName));
}
public void updateItemQuantity(String itemName, int newQuantity) {
for (InventoryItem item : inventory) {
if (item.getName().equals(itemName)) {
item.setQuantity(newQuantity);
return;
}
}
}
public List<InventoryItem> getInventory() {
return new ArrayList<>(inventory);
}
}
Créez la classe de test InventoryManagerTest avec des tests paramétrés :
package com.example;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class InventoryManagerTest {
@ParameterizedTest
@CsvSource({
"Laptop, 10, Tablet, 5, Mouse, 20, Laptop, 15",
"Chair, 50, Table, 30, Chair, 40, Table, 25"
})
public void testInventoryOperations(String itemName1, int quantity1, String itemName2, int quantity2,
String updateItemName, int updatedQuantity) {
InventoryManager inventoryManager = new InventoryManager();
// Adding items to inventory
inventoryManager.addItem(new InventoryItem(itemName1, quantity1));
inventoryManager.addItem(new InventoryItem(itemName2, quantity2));
// Updating item quantity
inventoryManager.updateItemQuantity(updateItemName, updatedQuantity);
// Verifying the changes
List<InventoryItem> updatedInventory = inventoryManager.getInventory();
assertEquals(quantity1, getItemQuantity(updatedInventory, itemName1));
assertEquals(quantity2, getItemQuantity(updatedInventory, itemName2));
assertEquals(updatedQuantity, getItemQuantity(updatedInventory, updateItemName));
}
private int getItemQuantity(List<InventoryItem> inventory, String itemName) {
for (InventoryItem item : inventory) {
if (item.getName().equals(itemName)) {
return item.getQuantity();
}
}
return 0;
}
}
Ce test paramétré utilise une source CSV pour spécifier différentes combinaisons d'articles à ajouter à l'inventaire, puis il met à jour la quantité d'un article spécifique et vérifie les changements. Vous pouvez personnaliser cet exemple en ajoutant d'autres opérations ou en étendant les fonctionnalités selon vos besoins.