# Actualización de pruebas unitarias para que coincidan con los cambios de código

Copilot Chat puede ayudarte a actualizar tus pruebas.

Al realizar cambios en el código, es importante actualizar las pruebas para comprobar el nuevo comportamiento y detectar los errores que haya introducido el nuevo código.
Copilot Chat puede ayudarle a actualizar rápidamente las pruebas para que coincidan con los cambios de código, lo que garantiza que el conjunto de pruebas permanezca sincronizado con la implementación.

## Escenario de ejemplo

Imagine que tiene una función de Python, `calculate_discount`, que determina el descuento de un importe de compra determinado. En el código original, obtendrá un descuento de 10% por importes superiores a 100 USD. Está realizando cambios en la lógica de la función, de modo que solo los precios superiores a 150 USD obtengan un descuento del 10% y ahora hay un descuento del 20% para montos superiores a 200 USD.

### Código original

En el código original, los precios de compra por encima de $100 obtienen un descuento de 10%.

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

### Código actualizado

En el código modificado, solo los importes superiores a $150 obtienen 10% descuento, y los importes superiores a $200 ahora obtienen un descuento de 20%.

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

### Pruebas existentes

En este ejemplo se muestran las pruebas existentes escritas para el código original.

```python
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()
```

## Mensaje de ejemplo

Puede pedir que Copilot Chat identifique y actualice las pruebas afectadas por el cambio de lógica.

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

## Respuesta de ejemplo

> \[!NOTE] La respuesta siguiente es un ejemplo. Las respuestas de Copilot Chat no son deterministas, por lo que puedes obtener una respuesta diferente a la aquí mostrada.

Copilot Chat analiza el código y las pruebas existentes e identifica qué pruebas producirán un error o ahora son engañosas después del cambio de código.

Por ejemplo, Copilot Chat explica que:

* ```
            `test_discount_above_100` ahora **tendrá errores**
  ```
* `test_discount_below_100` y `test_discount_exactly_100` seguirán siendo válidos, pero ahora son **confusos**, ya que el umbral del 10% de descuento es de $150 y no de $100.

Además, Copilot Chat identifica cualquier **cobertura de pruebas que falte**, como el nuevo nivel de descuento de 20 % para importes superiores a 200 USD.

Copilot Chat propone un conjunto actualizado de pruebas.

### Pruebas actualizadas

```python
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()
```

## Lectura adicional

* [Ingeniería de mensajes para GitHub Copilot Chat](/es/copilot/concepts/prompting/prompt-engineering)
* [Procedimientos recomendados para usar GitHub Copilot](/es/copilot/get-started/best-practices)