{"meta":{"title":"単体テストの生成","intro":"コパイロットチャット は、関数の単体テストの生成に役立ちます。","product":"GitHub Copilot","breadcrumbs":[{"href":"/ja/copilot","title":"GitHub Copilot"},{"href":"/ja/copilot/tutorials","title":"チュートリアル"},{"href":"/ja/copilot/tutorials/copilot-chat-cookbook","title":"GitHub Copilot チャットクックブック"},{"href":"/ja/copilot/tutorials/copilot-chat-cookbook/testing-code","title":"コードのテスト"},{"href":"/ja/copilot/tutorials/copilot-chat-cookbook/testing-code/generate-unit-tests","title":"単体テストを生成する"}],"documentType":"article"},"body":"# 単体テストの生成\n\nコパイロットチャット は、関数の単体テストの生成に役立ちます。\n\n単体テストの優れたスイートは、プロジェクトの成功に不可欠です。 ただし、このようなテストの記述には時間がかかるため、行われないこともよくあります。 コパイロットチャット は、このようなテストの自動生成に役立ちます。\n\n## シナリオ例\n\nデータベースを更新する前にデータを検証する Python 関数があるとします。 検証が期待どおりに実行されることを確認するために、単体テストを作成する必要があります。 このようなテストの自動生成を コパイロットチャット に依頼できます。\n\n```python id=validate-price\ndef validate_price(price: float):\n  if price <= 0:\n    raise ValueError(\"Price must be greater than 0\")\n  if price > 1000:\n    raise ValueError(\"Price must be less than or equal to 1000\")\n```\n\n## プロンプトの例\n\n```copilot copy prompt ref=validate-price\n/tests Generate unit tests for this function. Validate both success and failure, and include edge cases.\n```\n\n## 応答の例\n\n> \\[!NOTE] 次の応答は例です。 コパイロットチャット の応答は非決定的であるため、ここで示したものとは異なる応答が返される可能性があります。\n\n初めて コパイロットチャット に単体テストの生成を依頼する場合は、projectの単体テストを構成するかどうかを確認するメッセージが表示されることがあります。 この例では、この提案を拒否すると想定しています。\n\nCopilot からは、テストを生成するための戦略が提供され、次にテスト自体が提供されます。\n\n```python\nimport unittest\nfrom generate_unit_tests import validate_price\n\nclass TestValidateProduct(unittest.TestCase):\n  def test_price_zero(self):\n    with self.assertRaises(ValueError) as context:\n      validate_price(0)\n    self.assertEqual(str(context.exception), \"Price must be greater than 0\")\n\n  def test_price_negative(self):\n    with self.assertRaises(ValueError) as context:\n      validate_price(-10)\n    self.assertEqual(str(context.exception), \"Price must be greater than 0\")\n\n  def test_price_above_limit(self):\n    with self.assertRaises(ValueError) as context:\n      validate_price(1500)\n    self.assertEqual(str(context.exception), \"Price must be less than or equal to 1000\")\n\n  def test_price_edge_case_zero(self):\n    with self.assertRaises(ValueError) as context:\n      validate_price(0)\n    self.assertEqual(str(context.exception), \"Price must be greater than 0\")\n\n  def test_price_edge_case_max(self):\n    try:\n      validate_price(1000)\n    except ValueError:\n      self.fail(\"validate_price() raised ValueError unexpectedly!\")\n\nif __name__ == '__main__':\n  unittest.main()\n```\n\n## 参考資料\n\n* [GitHub Copilot Chat のプロンプト エンジニアリング](/ja/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [GitHub Copilot の使用に関するベスト プラクティス](/ja/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}