🚀 使用 GitHub Copilot 编写测试代码

GitHub Copilot 是一个 AI 编码助手,可以帮助你快速生成 单元测试(Unit Test)集成测试(Integration Test),大幅提高开发效率!


📌 1. 如何在 VS Code 中启用 Copilot

1️⃣ 安装 GitHub Copilot 插件

  • VS Code 的扩展市场搜索 GitHub Copilot,安装插件
  • 登录你的 GitHub 账户(需订阅 Copilot 服务)

2️⃣ 启用 Copilot

  • 打开 VS Code
  • 进入 Settings,搜索 Copilot,确保 启用

📌 2. 让 Copilot 生成 Python 测试代码

✅ 例子:为 math_utils.py 生成测试

📜 被测代码(math_utils.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        raise ValueError("Cannot divide by zero")
    return a / b

✅ 1️⃣ 让 Copilot 生成 unittest

💡 提示 Copilot 生成测试

在 VS Code 中,新建 test_math_utils.py,输入:

import unittest
from math_utils import add, subtract, multiply, divide

然后 按下回车,Copilot 会自动补全测试代码:

class TestMathUtils(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertEqual(add(-1, 1), 0)

    def test_subtract(self):
        self.assertEqual(subtract(10, 5), 5)
        self.assertEqual(subtract(0, 3), -3)

    def test_multiply(self):
        self.assertEqual(multiply(4, 5), 20)
        self.assertEqual(multiply(-1, 5), -5)

    def test_divide(self):
        self.assertEqual(divide(10, 2), 5)
        self.assertRaises(ValueError, divide, 5, 0)

if __name__ == "__main__":
    unittest.main()

✅ 2️⃣ 让 Copilot 生成 pytest

如果你更喜欢 pytest,创建 test_math_utils.py,输入:

import pytest
from math_utils import add, subtract, multiply, divide

然后 按下回车,Copilot 会自动补全:

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

def test_subtract():
    assert subtract(10, 5) == 5
    assert subtract(0, 3) == -3

def test_multiply():
    assert multiply(4, 5) == 20
    assert multiply(-1, 5) == -5

def test_divide():
    assert divide(10, 2) == 5
    with pytest.raises(ValueError):
        divide(5, 0)

📌 3. 运行测试

✅ 运行 unittest

python -m unittest test_math_utils.py

✅ 运行 pytest

pytest test_math_utils.py

📌 4. Copilot 还能帮你生成 Mock 测试

💡 如果你的代码依赖数据库或 API,可以用 unittest.mock
创建 test_db.py,输入:

from unittest.mock import MagicMock

Copilot 会自动补全:

import unittest
from unittest.mock import MagicMock
from db_utils import fetch_data

class TestDatabase(unittest.TestCase):
    def test_fetch_data(self):
        mock_db = MagicMock()
        mock_db.query.return_value = {"id": 1, "name": "Alice"}

        result = fetch_data(mock_db, "SELECT * FROM users")
        self.assertEqual(result, {"id": 1, "name": "Alice"})

if __name__ == "__main__":
    unittest.main()

🚀 使用 GitHub Copilot 生成代码覆盖率测试(Coverage Testing)

代码覆盖率测试用于 检查代码的执行情况,确保 测试覆盖到关键逻辑,提高代码质量。
Copilot 可以帮助你 自动生成测试,并结合 coverage.py 计算覆盖率! 📈


📌 1. 安装必要的依赖

pip install coverage pytest

📌 2. 示例代码

创建 math_utils.py(被测代码):

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        raise ValueError("Cannot divide by zero")
    return a / b

📌 3. 让 Copilot 生成测试

✅ 1️⃣ 自动生成 pytest 测试

创建 test_math_utils.py,输入:

import pytest
from math_utils import add, subtract, multiply, divide

然后 按回车,Copilot 会自动补全:

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

def test_subtract():
    assert subtract(10, 5) == 5
    assert subtract(0, 3) == -3

def test_multiply():
    assert multiply(4, 5) == 20
    assert multiply(-1, 5) == -5

def test_divide():
    assert divide(10, 2) == 5
    with pytest.raises(ValueError):
        divide(5, 0)

📌 4. 运行代码覆盖率测试

✅ 运行 coverage.py

coverage run -m pytest

然后 生成覆盖率报告

coverage report -m

示例输出:

Name            Stmts   Miss  Cover
-----------------------------------
math_utils.py       8      0   100%

✅ 生成 HTML 报告

coverage html

然后 打开 htmlcov/index.html 查看详细报告


📌 5. 让 Copilot 自动优化测试

如果覆盖率 <100%,你可以:

1️⃣ 在 VS Code 中打开 test_math_utils.py
2️⃣ 输入 # 添加更多测试覆盖
3️⃣ 按下 Enter,Copilot 会自动补全未测试的部分! 🎯


🚀 使用 GitHub Copilot 进行接口测试(API Testing)

GitHub Copilot 可以帮助你快速生成 API 接口测试,结合 pytestrequests,让测试更高效!🔥


📌 1. 安装必要的依赖

pip install requests pytest

如果你的项目使用 FastAPIFlask,你可能需要:

pip install fastapi flask httpx

📌 2. 示例:创建一个 Flask API

创建 app.py

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/add', methods=['POST'])
def add():
    data = request.get_json()
    result = data['a'] + data['b']
    return jsonify({"result": result})

@app.route('/status', methods=['GET'])
def status():
    return jsonify({"status": "ok"})

if __name__ == '__main__':
    app.run(debug=True)

启动 Flask API:

python app.py

📌 3. 让 Copilot 自动生成 API 测试

✅ 1️⃣ 生成 pytest 测试

创建 test_api.py,输入:

import requests

然后 按回车,Copilot 会自动补全:

BASE_URL = "http://127.0.0.1:5000"

def test_status():
    response = requests.get(f"{BASE_URL}/status")
    assert response.status_code == 200
    assert response.json()["status"] == "ok"

def test_add():
    response = requests.post(f"{BASE_URL}/add", json={"a": 3, "b": 5})
    assert response.status_code == 200
    assert response.json()["result"] == 8

📌 4. 运行测试

pytest test_api.py

如果测试通过,你会看到:

============================= test session starts =============================
collected 2 items

test_api.py .. ✅ ✅   (全部通过)

📌 5. 让 Copilot 自动优化测试

如果你想做更全面的测试,可以:

1️⃣ test_api.py 里输入 # 添加更多 API 测试
2️⃣ Enter,Copilot 会自动补全 edge cases! 🎯


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐