# Обновление модульных тестов для соответствия изменениям кода

Copilot Chat Может помочь с обновлением ваших тестов.

Когда вы вносите изменения в код, важно обновлять тесты, чтобы проверить новое поведение и обнаружить баги, введённые новым кодом.
Copilot Chat Это поможет вам быстро обновить тесты в соответствии с изменениями в коде, обеспечивая синхронизацию вашего тестового пакета с вашей реализацией.

## Пример сценария

Представьте, что у вас есть функция на Python, `calculate_discount`, которая определяет скидку на определённую сумму покупки. В оригинальном коде вы получаете скидку в 10% на суммы свыше $100. Вы меняете логику функции: только цены выше $150 получают скидку в 10%, а теперь скидка в 20% для сумм выше $200.

### Оригинальный код

В оригинальном коде цена покупки выше $100 получает скидку в 10%.

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

### Обновлённый код

В изменённом коде скидку 10% получают только суммы выше $150, а суммы выше $200 — скидку в 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
```

### Существующие испытания

В этом примере показаны существующие тесты, написанные для исходного кода.

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

## Пример запроса

Вы можете попросить Copilot Chat выявить и обновить любые тесты, затронутые изменением вашей логики.

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

## Пример ответа

> \[!NOTE] Следующий ответ является примером. Ответы Copilot Chat являются недетерминированными, поэтому вы можете получить другой ответ, показанный здесь.

Copilot Chat анализирует ваш код и существующие тесты, а также определяет, какие тесты провалятся, либо которые теперь вводят в заблуждение после изменения кода.

Например, Copilot Chat объясняет, что:

* `test_discount_above_100` теперь **провалится**
* `test_discount_below_100` и `test_discount_exactly_100` пройдёт, но теперь они **вводят в заблуждение**, поскольку порог скидки в 10% теперь составляет $150, а не $100.

Кроме того, Copilot Chat выявляет **отсутствие страхового покрытия,** например, новый уровень дисконтов в 20% для сумм свыше $200.

Copilot Chat предлагает обновлённый набор тестов.

### Обновлённые тесты

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

## Дополнительные материалы

* [Инженерия подсказок для GitHub Copilot Chat](/ru/copilot/concepts/prompting/prompt-engineering)
* [Лучшие практики использования GitHub Copilot](/ru/copilot/get-started/best-practices)