github-docs-arabic-enhanced / content /copilot /tutorials /copilot-chat-cookbook /testing-code /generate-unit-tests.md
| 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 | |
| - Author and optimize with Copilot | |
| 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 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") | |
| ``` | |
| ## Example prompt | |
| ```copilot copy prompt ref=validate-price | |
| /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 %} | |