Dernière modification : Jun 01 , 2024

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.