生成全面的单元测试,覆盖边界情况和错误处理。
好的!在使用 `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` 函数在各种正常场景、边界情况下的正确性,也涵盖了浮点误差和异常输入的处理。
好的,这是 `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 执行测试并验证所有用例覆盖。
以下是一个全面的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并优化测试流程。
快速生成标准化测试案例模板,减少人工检查测试覆盖率的时间成本。
通过自动化生成案例,将单元测试理念结合实际代码教学,提升学员的实践能力与效率。
支持多语言和测试工具,解决团队测试策略不统一的问题,实现测试体系标准化。
帮助开发者快速生成全面、高质量、覆盖边界情况与错误处理的单元测试,从而提高代码可靠性和开发效率。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
免费获取高级提示词-优惠即将到期