84 lines
2.9 KiB
Markdown
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 %}
|