Skip to main content

Mise à jour des tests unitaires pour correspondre aux modifications du code

Discussion avec Copilot peut vous aider à mettre à jour vos tests.

Lorsque vous apportez des modifications à votre code, il est important de mettre à jour les tests afin de vérifier le nouveau comportement et d’intercepter les bogues introduits par le nouveau code. Discussion avec Copilot peut vous aider à mettre à jour rapidement les tests pour qu’ils correspondent à vos modifications de code, ce qui garantit que votre suite de tests reste synchronisée avec votre implémentation.

Exemple de scénario

Imaginez que vous disposez d’une fonction Python, calculate_discountqui détermine la remise pour un montant d’achat donné. Dans le code d’origine, vous obtenez une remise de 10% pour les montants de plus de 100 $. Vous apportez des modifications à la logique de la fonction, de sorte que seuls les prix de plus de 150 $ obtiennent une remise de 10%, et il y a maintenant une remise de 20% pour les montants de plus de 200 $.

Code d’origine

Dans le code d’origine, les prix d’achat supérieurs à 100 $ obtiennent une remise de 10%.

def calculate_discount(amount: float) -> float:
    if amount > 100:
        return amount * 0.1  # 10% discount
    return 0.0

Code mis à jour

Dans le code modifié, seuls les montants supérieurs à 150 $ obtiennent 10% remise, et les montants supérieurs à 200 $ obtiennent maintenant une remise de 20%.

def calculate_discount(amount: float) -> float:
    if amount > 200:
        return amount * 0.2  
    elif amount > 150:
        return amount * 0.1
    return 0.0

Tests existants

Cet exemple montre les tests existants qui ont été écrits pour le code d’origine.

import unittest
from discount import calculate_discount

class TestCalculateDiscount(unittest.TestCase):
    def test_discount_above_100(self):
        # $140 should get a $14 discount (10%)
        self.assertAlmostEqual(calculate_discount(140), 14.0)
    
    def test_discount_below_100(self):
        # $80 should get no discount
        self.assertEqual(calculate_discount(80), 0.0)

    def test_discount_exactly_100(self):
        # $100 is not above 100, so no discount
        self.assertEqual(calculate_discount(100), 0.0)

if __name__ == '__main__':
    unittest.main()

Exemples d’invite

Vous pouvez demander Discussion avec Copilot pour identifier et mettre à jour tous les tests affectés par votre modification logique.

Given the update to the `calculate_discount` function, update the unit tests that may fail or become outdated as a result.

Exemple de réponse

Remarque

La réponse suivante est un exemple. Les réponses Discussion avec Copilot ne sont pas déterministes, vous pouvez donc obtenir une réponse différente de celle affichée ici.

Discussion avec Copilot analyse votre code et vos tests existants, et identifie les tests qui échouent ou sont désormais trompeurs en suivant votre modification de code.

Par exemple, Discussion avec Copilot explique que :

  •           `test_discount_above_100`              **va échouer**
    
  •         `test_discount_below_100` et `test_discount_exactly_100` passeront, mais ils sont maintenant **trompeurs**, puisque le seuil de la remise de 10% est maintenant de 150 $, et non pas 100 $.
    

En outre, Discussion avec Copilot identifie toute couverture de test manquante, telle que le nouveau niveau de remise de 20% pour les montants de plus de 200 $.

Discussion avec Copilot propose un ensemble de tests mis à jour.

Mises à jour des tests

import unittest
from discount import calculate_discount

class TestCalculateDiscount(unittest.TestCase):
    def test_discount_above_200(self):
        # $250 should get a $50 discount (20%)
        self.assertAlmostEqual(calculate_discount(250), 50.0)

    def test_discount_above_150(self):
        # $175 should get a $17.50 discount (10%)
        self.assertAlmostEqual(calculate_discount(175), 17.5)

    def test_discount_at_or_below_150(self):
        # $150 is not above 150, so no discount
        self.assertEqual(calculate_discount(150), 0.0)
        # $80 should get no discount
        self.assertEqual(calculate_discount(80), 0.0)

if __name__ == '__main__':
    unittest.main()

Lectures complémentaires