单元测试生成器

66 浏览
5 试用
0 购买
Sep 6, 2025更新

生成全面的单元测试,覆盖边界情况和错误处理。

示例1

好的!在使用 `pytest` 对 `add_numbers` 函数编写全面的测试时,我们需要充分考虑正常情况、边界情况、错误处理和完整的覆盖性。以下是为函数 `add_numbers` 创建的完整测试代码:

### 函数定义
我们需要测试的函数如下:
```python
def add_numbers(a, b):
    return a + b
```

---

### 测试代码(使用 pytest)
将以下代码保存到 `test_add_numbers.py` 文件中或适合的测试文件中,用于运行 `pytest`。

```python
import pytest
from your_module import add_numbers  # 替换成实际模块名称

# 测试正常情况
def test_add_positive_numbers():
    assert add_numbers(2, 3) == 5

def test_add_negative_numbers():
    assert add_numbers(-2, -3) == -5

def test_add_mixed_numbers():
    assert add_numbers(-2, 3) == 1

def test_add_zero():
    assert add_numbers(0, 5) == 5
    assert add_numbers(5, 0) == 5
    assert add_numbers(0, 0) == 0

# 测试边界情况(大数值)
def test_large_numbers():
    assert add_numbers(10**10, 10**10) == 2 * 10**10
    assert add_numbers(-10**10, 10**10) == 0

def test_small_numbers():
    assert add_numbers(1e-10, 1e-10) == 2e-10
    assert add_numbers(-1e-10, -1e-10) == -2e-10

# 测试浮点数
def test_add_floats():
    assert add_numbers(0.1, 0.2) == pytest.approx(0.3)
    assert add_numbers(-0.1, 0.2) == pytest.approx(0.1)

# 测试错误处理
def test_add_invalid_types():
    with pytest.raises(TypeError):
        add_numbers("a", "b")
    with pytest.raises(TypeError):
        add_numbers(2, "b")
    with pytest.raises(TypeError):
        add_numbers(None, 2)
    with pytest.raises(TypeError):
        add_numbers([], {})

# 测试边界值和分支
def test_edge_cases():
    # 测试整数与浮点数混合
    assert add_numbers(5, 0.5) == 5.5
    assert add_numbers(-1, 0.1) == pytest.approx(-0.9)
    
    # 极小负数和正数相加
    assert add_numbers(-1e-50, 1e-50) == 0

    # 测试大数与小数混合
    assert add_numbers(10**10, 1e-10) == pytest.approx(10**10 + 1e-10)
```

---

### 代码说明

1. **正常情况**:
   - 确保函数可以正确求和,例如两个正整数相加、两个负整数相加、负数与正数混合相加。

2. **边界情况**:
   - 测试非常大的数值(10^10 级别)加和以及非常小的数(1e-10)。
   - 测试零的特殊作用(数字加零等于本身)。
   - 测试整数与浮点数混合。

3. **错误处理**:
   - 测试当输入的参数类型不符合要求时(如字符串、`None`、列表等)是否抛出合适的异常。

4. **浮点数的特殊测试**:
   - 使用 `pytest.approx` 断言浮点数运算值,解决浮点数算术的误差问题。

5. **边界值**:
   - 有些情况下可能会有极端值边界组合(如最大正数加最小数、正零与负零等)。

---

### 运行测试
保存测试代码后,运行以下命令来运行单元测试:
```bash
pytest test_add_numbers.py
```

### 输出结果
在所有测试都通过时,`pytest` 会显示类似于以下内容:
```plaintext
=========================== test session starts ============================
collected 11 items

test_add_numbers.py ...........                                       [100%]

=========================== 11 passed in 0.02s ============================
```

这些测试用例确保了 `add_numbers` 函数在各种正常场景、边界情况下的正确性,也涵盖了浮点误差和异常输入的处理。

示例2

好的,这是 `addNumbers` 函数的全面单元测试,将使用 Jest 来覆盖边界情况、错误处理和功能测试。以下是详细的示例代码:

### `addNumbers` 函数

```javascript
const addNumbers = (a, b) => a + b;
```

### Jest 单元测试:`addNumbers.test.js`

```javascript
const addNumbers = require('./addNumbers');

describe('addNumbers', () => {
  // 基本功能测试
  test('adds two positive numbers correctly', () => {
    expect(addNumbers(2, 3)).toBe(5);
  });

  test('adds a positive number and zero correctly', () => {
    expect(addNumbers(5, 0)).toBe(5);
  });

  test('adds two zeroes correctly', () => {
    expect(addNumbers(0, 0)).toBe(0);
  });

  test('adds two negative numbers correctly', () => {
    expect(addNumbers(-3, -7)).toBe(-10);
  });

  test('adds a positive number and a negative number correctly', () => {
    expect(addNumbers(10, -7)).toBe(3);
  });

  test('adds numbers resulting in zero correctly', () => {
    expect(addNumbers(5, -5)).toBe(0);
  });

  // 边界情况测试
  test('adds very large numbers correctly', () => {
    const largeNumber1 = Number.MAX_SAFE_INTEGER; // 最大安全整数
    const largeNumber2 = 1;
    expect(addNumbers(largeNumber1, largeNumber2)).toBe(largeNumber1 + largeNumber2);
  });

  test('adds very small numbers correctly', () => {
    const smallNumber1 = -Number.MAX_SAFE_INTEGER; // 最小安全整数
    const smallNumber2 = -1;
    expect(addNumbers(smallNumber1, smallNumber2)).toBe(smallNumber1 + smallNumber2);
  });

  // 非数值输入的错误处理
  test('throws an error if inputs are not numbers (string input)', () => {
    expect(() => addNumbers('5', 5)).toThrowError('Inputs must be numbers');
  });

  test('throws an error if inputs are not numbers (undefined input)', () => {
    expect(() => addNumbers(undefined, 5)).toThrowError('Inputs must be numbers');
  });

  test('throws an error if inputs are not numbers (null input)', () => {
    expect(() => addNumbers(null, 5)).toThrowError('Inputs must be numbers');
  });

  test('throws an error if inputs are not numbers (NaN input)', () => {
    expect(() => addNumbers(NaN, 5)).toThrowError('Inputs must be numbers');
  });

  // 浮点数加法测试
  test('adds floating point numbers correctly', () => {
    expect(addNumbers(0.1, 0.2)).toBeCloseTo(0.3); // 使用 toBeCloseTo 处理浮点数精度问题
  });

  test('adds large floating point numbers correctly', () => {
    expect(addNumbers(12345.678, 98765.432)).toBeCloseTo(111111.11);
  });
});
```

### 修改 `addNumbers` 函数以支持错误处理

在现有的 `addNumbers` 函数编码中,并未处理非数值输入的错误情况。为了确保测试用例可以通过,需要对函数进行如下优化:

```javascript
const addNumbers = (a, b) => {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error('Inputs must be numbers');
  }
  return a + b;
};

module.exports = addNumbers; // 如果需要测试,将其导出供 Jest 使用
```

### 测试文件结构

项目的目录结构推荐如下:

```
project/
├── addNumbers.js         // 功能实现
└── __tests__/
    └── addNumbers.test.js // 测试文件
```

### 单元测试说明

1. 边界测试:
   - 检查最大和最小安全整数 `Number.MAX_SAFE_INTEGER` 与 `Number.MIN_SAFE_INTEGER`。
   - 测试极小浮点数加法。
2. 错误处理:
   - 验证非数值输入(如字符串、`undefined`、`null`、`NaN`)时,抛出合理错误。
3. 正确性测试:
   - 验证正常情况下整数和浮点数的加法行为。

### 如何运行 Jest 测试

1. 确保安装了 Jest:
   ```bash
   npm install --save-dev jest
   ```

2. 更新 `package.json` 中的 `scripts`:
   ```json
   "scripts": {
     "test": "jest"
   }
   ```

3. 运行测试:
   ```bash
   npm test
   ```

这将使用 Jest 执行测试并验证所有用例覆盖。

示例3

以下是一个全面的JUnit单元测试类,用于测试 `addNumbers` 方法。使用 JUnit 5(JUnit Jupiter)。为了达到全面覆盖,我们重点关注了正常情况、边界情况和潜在的错误处理。

### 测试类代码

```java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AddNumbersTest {

    // 测试对象
    private final AddNumbers addNumbers = new AddNumbers();

    @Test
    void testAddPositiveNumbers() {
        assertEquals(5, addNumbers.addNumbers(2, 3));
    }

    @Test
    void testAddNegativeNumbers() {
        assertEquals(-5, addNumbers.addNumbers(-2, -3));
    }

    @Test
    void testAddPositiveAndNegative() {
        assertEquals(1, addNumbers.addNumbers(3, -2));
    }

    @Test
    void testAddZeroToNumber() {
        assertEquals(5, addNumbers.addNumbers(5, 0));
        assertEquals(0, addNumbers.addNumbers(0, 0));
    }

    @Test
    void testAddLargeNumbers() {
        assertEquals(2147483646, addNumbers.addNumbers(2147483646, 0));
    }

    @Test
    void testAddNumbersWithOverflowCheck() {
        int a = Integer.MAX_VALUE;
        int b = 1;  // 测试溢出是否会出现问题
        assertThrows(ArithmeticException.class, () -> Math.addExact(addNumbers.calc());

适用用户

后端开发工程师

通过提示词快速生成复杂后台逻辑的单元测试代码,节省时间并提升项目代码质量。

测试开发人员

高效覆盖潜在边界和错误场景,协助团队发现bug并优化测试流程。

创业公司技术团队

快速生成标准化测试案例模板,减少人工检查测试覆盖率的时间成本。

教育和培训机构

通过自动化生成案例,将单元测试理念结合实际代码教学,提升学员的实践能力与效率。

跨语言开发团队

支持多语言和测试工具,解决团队测试策略不统一的问题,实现测试体系标准化。

解决的问题

帮助开发者快速生成全面、高质量、覆盖边界情况与错误处理的单元测试,从而提高代码可靠性和开发效率。

特征总结

轻松生成全面单元测试代码,覆盖边界情况和多种处理场景,提升测试可靠性。
智能关注错误处理,通过自动检测和生成测试用例减少潜在程序漏洞。
快速覆盖复杂业务逻辑,提升代码质量的同时节省开发时间。
支持多种编程语言和测试框架,满足不同开发团队的技术需求。
一键创建标准化测试模板,降低团队中手工编写测试的难度与成本。
自动优化测试覆盖范围,让复杂代码逻辑的测试更加无缝精准。
灵活调用提示词模板,轻松实现测试场景扩展,适应多样化项目需求。
贴合实际开发场景,提供更专业的测试建议,帮助团队轻松应对版本迭代。

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

免费
请先免费试用,确保满足您的需求。

您购买后可以获得什么

获得完整提示词模板
- 共 41 tokens
- 3 个可调节参数
{ 语言 } { 测试框架 } { 代码 }
自动加入"我的提示词库"
- 获得提示词优化器支持
- 版本化管理支持
获得社区共享的应用案例
限时免费

不要错过!

免费获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59
摄影
免费 原价:20 限时
试用