1
0
mirror of synced 2025-12-20 10:28:40 -05:00
Files
docs/content/copilot/tutorials/copilot-chat-cookbook/testing-code/generate-unit-tests.md

84 lines
2.9 KiB
Markdown

---
title: Generating unit tests
shortTitle: Generate unit tests
intro: '{% data variables.copilot.copilot_chat_short %} can help with generating unit tests for a function.'
redirect_from:
- /copilot/example-prompts-for-github-copilot-chat/testing-code/generate-unit-tests
- /copilot/copilot-chat-cookbook/testing-code/generate-unit-tests
versions:
feature: copilot
category:
- Testing code
complexity:
- Intermediate
octicon: beaker
topics:
- Copilot
contentType: tutorials
---
A good suite of unit tests is critical to the success of any project. However, writing these tests can be time-consuming and are often neglected. {% data variables.copilot.copilot_chat_short %} can help generate these tests for you.
## Example scenario
Imagine you have a Python function which validates data before updating the database. You need to create unit tests to ensure the validation performs the way you expect. You can ask {% data variables.copilot.copilot_chat_short %} to generate these tests for you.
```python
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")
```
## Example prompt
`/tests Generate unit tests for this function. Validate both success and failure, and include edge cases.`
## Example response
{% data reusables.copilot.example-prompts.response-is-an-example %}
If this is your first time asking {% data variables.copilot.copilot_chat_short %} to generate unit tests, it may ask you if you wish to configure unit tests for your project. For this example, we are assuming you decline this offer.
{% data variables.product.prodname_copilot_short %} will provide a strategy for generating the tests, and then provide the tests themselves.
```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()
```
## Further reading
{% data reusables.copilot.example-prompts.further-reading-items %}