热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
基于代码和场景生成高质量单元测试
以下是为 add 函数编写的全面单元测试代码,使用了 pytest 测试框架,确保测试覆盖以下场景:边界条件、正常输入、空值输入,以及正向和反向用例。
import pytest
# 假设被测试函数定义在 "math_operations.py" 文件中
# from math_operations import add
from your_module import add # 替换成你的模块路径
# 测试正常输入
@pytest.mark.parametrize(
"a, b, expected",
[
(1, 1, 2), # 正常正数相加
(-1, -1, -2), # 负数相加
(1.5, 2.5, 4.0), # 浮点数相加
(0, 0, 0), # 边界条件:0 加 0
(100, 200, 300), # 较大的正整数
(-100, 50, -50), # 正数和负数相加
]
)
def test_add_normal_cases(a, b, expected):
assert add(a, b) == expected
# 测试空值输入
def test_add_with_none():
with pytest.raises(TypeError):
add(None, None) # 两个参数都为 None
with pytest.raises(TypeError):
add(None, 1) # 一个为空值
with pytest.raises(TypeError):
add(1, None) # 一个为空值
# 测试非数值输入(反向用例)
@pytest.mark.parametrize(
"a, b",
[
("1", 2), # 字符串和数字相加
([], 1), # 列表和数字相加
({}, 1), # 字典和数字相加
(set(), 1), # 集合和数字相加
(True, 1), # 布尔值和数字相加
]
)
def test_add_invalid_input(a, b):
with pytest.raises(TypeError): # 预期抛出 TypeError
add(a, b)
# 边界条件测试
@pytest.mark.parametrize(
"a, b, expected",
[
(float('inf'), 1, float('inf')), # 正无穷大
(float('-inf'), 1, float('-inf')), # 负无穷大
(float('inf'), float('-inf'), float('nan')), # 正无穷加负无穷
(0, float('nan'), float('nan')), # 与 NaN 相加的情况
]
)
def test_add_boundary_cases(a, b, expected):
result = add(a, b)
if expected != expected: # NaN 检测
assert result != result
else:
assert result == expected
# 模拟依赖项(这里纯函数无外部依赖,不需要模拟依赖)
# 如果函数有外部依赖,例如数据库查询、网络请求等,可以通过 mock 的方式模拟依赖的行为。
test_add_normal_cases: 测试了一系列正常输入,包括正数、负数、浮点数、边界(包含 0)、较大整数以及混合正负数。test_add_with_none: 测试了输入为 None 的边界情况,预期函数抛出 TypeError。test_add_invalid_input: 使用非数值输入测试函数是否能够正确处理错误类型的参数,预期抛出 TypeError。test_add_boundary_cases: 测试了特殊情况下的边界值输入:无穷大、NaN 等,确保函数处理这些边界值时的行为符合预期。add 是一个纯函数,没有外部依赖。在命令行中运行以下命令以运行测试:
pytest -v
pytest 将会以详细模式显示测试结果,每个场景的结果都会清晰显示。
以下是针对 multiply 方法使用 JUnit 编写的单元测试。我们将覆盖所有提到的场景,包括正常输入、非法输入、最大最小值输入、正向与反向用例,以及边界条件。
需要注意的是原始函数 multiply 方法接收的是两个整数 int x 和 int y,并简单返回它们的乘积。由于该函数无异常处理或依赖项,没有直接的「非法输入」,我们假设非法输入不适用于 multiply。测试重点会放在边界条件测试上,例如最大值、最小值溢出等。
以下是单元测试代码:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import static org.junit.jupiter.api.Assertions.*;
public class MultiplyTest {
// 待测试的方法
public int multiply(int x, int y) {
return x * y;
}
// 正常输入测试:两个正整数
@Test
public void testNormalPositiveInput() {
assertEquals(20, multiply(4, 5), "Multiply of 4 and 5 should be 20");
}
// 正常输入测试:一个正整数和零
@Test
public void testMultiplyWithZero() {
assertEquals(0, multiply(4, 0), "Multiply of 4 and 0 should be 0");
assertEquals(0, multiply(0, 100), "Multiply of 0 and 100 should be 0");
}
// 正常输入测试:两个负整数
@Test
public void testNegativeInput() {
assertEquals(20, multiply(-4, -5), "Multiply of -4 and -5 should be 20");
}
// 正常输入测试:一个正整数和一个负整数
@Test
public void testPositiveAndNegativeInput() {
assertEquals(-20, multiply(4, -5), "Multiply of 4 and -5 should be -20");
assertEquals(-20, multiply(-4, 5), "Multiply of -4 and 5 should be -20");
}
// 边界条件测试:整数最大值和最小值
@Test
public void testBoundaryConditions() {
assertEquals(Integer.MAX_VALUE, multiply(Integer.MAX_VALUE, 1), "Multiply of Integer.MAX_VALUE and 1 should be Integer.MAX_VALUE");
assertEquals(Integer.MIN_VALUE, multiply(Integer.MIN_VALUE, 1), "Multiply of Integer.MIN_VALUE and 1 should be Integer.MIN_VALUE");
}
// 边界条件:可能的整数溢出
@Test
public void testOverflow() {
assertEquals(0, multiply(Integer.MIN_VALUE, 0), "Multiply of Integer.MIN_VALUE and 0 should be 0");
// 对可能存在的溢出行为进行保护
assertThrows(ArithmeticException.class, new Executable() {
@Override
public void execute() {
int result = multiply(Integer.MAX_VALUE, 2); // 假象溢出手段 /保护灵活
以下是基于 Google Test 的单元测试代码,它对 divide 函数测试了正向、反向用例、边界条件和异常情况:
#include <gtest/gtest.h>
#include <stdexcept>
// 被测试函数
int divide(int a, int b) {
if (b != 0) return a / b;
throw std::invalid_argument("Division by zero");
}
// 测试用例
TEST(DivideFunctionTest, NormalInputs) {
// 正常输入测试的正向用例
EXPECT_EQ(divide(4, 2), 2);
EXPECT_EQ(divide(9, 3), 3);
EXPECT_EQ(divide(-10, 2), -5);
EXPECT_EQ(divide(10, -2), -5);
EXPECT_EQ(divide(-10, -2), 5);
// 正常输入测试的反向用例
EXPECT_NE(divide(5, 2), 3); // 5 / 2 = 2(整数除法)
EXPECT_NE(divide(8, 4), 1); // 8 / 4 = 2
}
TEST(DivideFunctionTest, DivisionByZero) {
// 异常情况:除以零应该抛出异常
EXPECT_THROW(divide(5, 0), std::invalid_argument);
EXPECT_THROW(divide(0, 0), std::invalid_argument);
}
TEST(DivideFunctionTest, DivisionWithZeroDividend) {
// 边界条件:被除数为 0
EXPECT_EQ(divide(0, 1), 0); // 0 / 1 = 0
EXPECT_EQ(divide(0, -1), 0); // 0 / -1 = 0
}
TEST(DivideFunctionTest, BoundaryInputs) {
// 测试 int 的边界值
EXPECT_EQ(divide(INT_MAX, 1), INT_MAX); // 最大正数除以 1
EXPECT_EQ(divide(INT_MIN, 1), INT_MIN); // 最小负数除以 1
EXPECT_EQ(divide(INT_MIN, -1), INT_MAX); // 特殊情况:整型溢出(INT_MIN / -1)
EXPECT_EQ(divide(INT_MAX, INT_MAX), 1); // 自身除以自身
EXPECT_EQ(divide(INT_MIN, INT_MIN), 1); // 自身除以自身
// 边界值条件下的其他测试
EXPECT_EQ(divide(1, INT_MAX), 0); // 1 / INT_MAX = 0(截断)
EXPECT_EQ(divide(-1, INT_MAX), 0); // -1 / INT_MAX = 0(截断)
}
TEST(DivideFunctionTest, ReversedInputs) {
// 测试输入的正负相反场景
EXPECT_EQ(divide(10, -2), -5); // 正数除以负数
EXPECT_EQ(divide(-10, 2), -5); // 负数除以正数
EXPECT_EQ(divide(-10, -2), 5); // 负数除以负数
EXPECT_EQ(divide(10, 2), 5); // 正数除以正数
}
正常输入测试:
(4, 2) 应正常返回 2。异常情况测试:
divide(5, 0),应该抛出一个异常 std::invalid_argument。边界条件测试:
INT_MAX 和 INT_MIN,确保函数能够正确处理整数的最大值和最小值。边界起点测试:
反向测试:
cmake 或命令行执行,例如:
g++ -std=c++11 -lgtest -lgtest_main -pthread divide_test.cpp -o divide_test
./divide_test
测试目标是确保函数行为在所有场景下都健壮可靠,让潜在缺陷早日显现。希望这段代码对你有所帮助!
帮助测试开发人员快速生成复杂系统的单元测试,覆盖更多场景并确保代码的高质量交付。
为全栈工程师在忙碌的开发任务中节省单元测试编写时间,为代码快速上线保驾护航。
为团队节省研发成本,同时提高测试覆盖率,保障产品质量,助力项目按时交付。
帮助开发人员快速生成高质量的单元测试代码,大幅提升代码覆盖率,节约时间和人力成本。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
免费获取高级提示词-优惠即将到期