{"meta":{"title":"更新单元测试以匹配代码更改","intro":"副驾驶聊天 可帮助更新测试。","product":"GitHub Copilot","breadcrumbs":[{"href":"/zh/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/zh/enterprise-cloud@latest/copilot/tutorials","title":"教程"},{"href":"/zh/enterprise-cloud@latest/copilot/tutorials/copilot-chat-cookbook","title":"GitHub Copilot Chat 指南"},{"href":"/zh/enterprise-cloud@latest/copilot/tutorials/copilot-chat-cookbook/testing-code","title":"测试代码"},{"href":"/zh/enterprise-cloud@latest/copilot/tutorials/copilot-chat-cookbook/testing-code/update-unit-tests","title":"更新单元测试"}],"documentType":"article"},"body":"# 更新单元测试以匹配代码更改\n\n副驾驶聊天 可帮助更新测试。\n\n对代码进行更改时，更新任何测试以验证新行为并捕获新代码引入的任何 bug 非常重要。 副驾驶聊天 可以帮助你快速更新测试，使其与代码变化保持一致，从而确保你的测试套件始终与实现保持同步。\n\n## 示例方案\n\n假设你有一个 Python 函数， `calculate_discount`用于确定给定购买金额的折扣。 在原始代码中，对于超过 100 美元的金额，可享受 10% 的折扣。 你正在更改函数的逻辑，以便只有价格超过 150 美元的项目获得 10% 折扣，而价格超过 200 美元的项目现在享有 20% 折扣。\n\n### 原始代码\n\n在原始代码中，购买价格超过 100 美元可获得 10% 折扣。\n\n```python\ndef calculate_discount(amount: float) -> float:\n    if amount > 100:\n        return amount * 0.1  # 10% discount\n    return 0.0\n```\n\n### 更新的代码\n\n在更改的代码中，只有超过 150 美元的金额将获得 10% 折扣，超过 200 美元的金额现在将获得 20% 折扣。\n\n```python id=calculate_discount\ndef calculate_discount(amount: float) -> float:\n    if amount > 200:\n        return amount * 0.2  \n    elif amount > 150:\n        return amount * 0.1\n    return 0.0\n```\n\n### 现有测试\n\n此示例演示为原始代码编写的现有测试。\n\n```python\nimport unittest\nfrom discount import calculate_discount\n\nclass TestCalculateDiscount(unittest.TestCase):\n    def test_discount_above_100(self):\n        # $140 should get a $14 discount (10%)\n        self.assertAlmostEqual(calculate_discount(140), 14.0)\n    \n    def test_discount_below_100(self):\n        # $80 should get no discount\n        self.assertEqual(calculate_discount(80), 0.0)\n\n    def test_discount_exactly_100(self):\n        # $100 is not above 100, so no discount\n        self.assertEqual(calculate_discount(100), 0.0)\n\nif __name__ == '__main__':\n    unittest.main()\n```\n\n## 示例提示\n\n可以请求 副驾驶聊天 识别并更新受逻辑更改影响的任何测试。\n\n```copilot\nGiven the update to the `calculate_discount` function, update the unit tests that may fail or become outdated as a result.\n```\n\n## 示例响应\n\n> \\[!NOTE] 以下响应是示例。 副驾驶聊天 的回答是不确定的，因此你可能会得到与这里所显示的不同的回答。\n\n副驾驶聊天 分析你的代码和现有测试，并确定哪些测试会失败，哪些测试在你的代码更改后会产生误导。\n\n例如，副驾驶聊天 说明了：\n\n* `test_discount_above_100` 现在将**失败**\n* `test_discount_below_100` 和 `test_discount_exactly_100` 将通过，但它们现在**具有误导性**，因为 10% 折扣的门槛现在是 150 美元，而不是 100 美元。\n\n此外，副驾驶聊天 标识任何**缺失的测试覆盖范围**，例如金额超过 200 美元的新 20% 折扣等级。\n\n副驾驶聊天 提出了更新的测试集。\n\n### 更新的测试\n\n```python\nimport unittest\nfrom discount import calculate_discount\n\nclass TestCalculateDiscount(unittest.TestCase):\n    def test_discount_above_200(self):\n        # $250 should get a $50 discount (20%)\n        self.assertAlmostEqual(calculate_discount(250), 50.0)\n\n    def test_discount_above_150(self):\n        # $175 should get a $17.50 discount (10%)\n        self.assertAlmostEqual(calculate_discount(175), 17.5)\n\n    def test_discount_at_or_below_150(self):\n        # $150 is not above 150, so no discount\n        self.assertEqual(calculate_discount(150), 0.0)\n        # $80 should get no discount\n        self.assertEqual(calculate_discount(80), 0.0)\n\nif __name__ == '__main__':\n    unittest.main()\n```\n\n## 延伸阅读\n\n* [GitHub Copilot 对话助手的提示设计](/zh/enterprise-cloud@latest/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [使用 GitHub Copilot 的最佳做法](/zh/enterprise-cloud@latest/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}