# Создание модульных тестов

Копилот Чат может помочь в создании модульных тестов для функции.

Хороший набор модульных тестов критически важен для успеха любого project. Однако написание этих тестов может занять много времени и часто игнорируется. Копилот Чат поможет вам создать эти тесты.

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

Представьте, что у вас есть функция Python, которая проверяет данные перед обновлением базы данных. Необходимо создать модульные тесты, чтобы убедиться, что проверка выполняет ожидаемый способ. Вы можете попросить Копилот Чат создать эти тесты.

```python id=validate-price
def validate_price(price: float):
  if price <= 0:
    raise ValueError("Price must be greater than 0")
  if price > 1000:
    raise ValueError("Price must be less than or equal to 1000")
```

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

```copilot copy prompt ref=validate-price
/tests Generate unit tests for this function. Validate both success and failure, and include edge cases.
```

## Пример отклика

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

Если вы впервые просите Копилот Чат генерировать юнит-тесты, возможно, вас спросят, хотите ли вы настроить модульные тесты для вашего project. В этом примере предполагается, что вы отклоните это предложение.

Copilot предоставит стратегию для создания тестов, а затем предоставить сами тесты.

```python
import unittest
from generate_unit_tests import validate_price

class TestValidateProduct(unittest.TestCase):
  def test_price_zero(self):
    with self.assertRaises(ValueError) as context:
      validate_price(0)
    self.assertEqual(str(context.exception), "Price must be greater than 0")

  def test_price_negative(self):
    with self.assertRaises(ValueError) as context:
      validate_price(-10)
    self.assertEqual(str(context.exception), "Price must be greater than 0")

  def test_price_above_limit(self):
    with self.assertRaises(ValueError) as context:
      validate_price(1500)
    self.assertEqual(str(context.exception), "Price must be less than or equal to 1000")

  def test_price_edge_case_zero(self):
    with self.assertRaises(ValueError) as context:
      validate_price(0)
    self.assertEqual(str(context.exception), "Price must be greater than 0")

  def test_price_edge_case_max(self):
    try:
      validate_price(1000)
    except ValueError:
      self.fail("validate_price() raised ValueError unexpectedly!")

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

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

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