热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
本提示词专为Python开发场景设计,能够智能分析代码逻辑并生成精准的断言语句。通过系统化的代码审查、逻辑分析、断言设计和验证流程,确保生成的断言既符合代码功能需求,又能有效捕获潜在错误。特别适用于单元测试开发、代码质量提升和自动化测试场景,帮助开发者快速构建可靠的测试用例,提升代码健壮性和可维护性。
代码分析摘要
断言设计思路
生成的断言代码
import math
import pytest
def chunk_text(text, max_len, overlap=0):
'''
Split text into chunks of length <= max_len with character overlap.
- Return list of strings
- Empty text -> []
- Raise ValueError if max_len < 1 or overlap < 0 or overlap >= max_len
- Preserve all characters; trim whitespace around each chunk
'''
if not isinstance(text, str):
raise TypeError('text must be str')
if max_len < 1 or overlap < 0 or overlap >= max_len:
raise ValueError('invalid window params')
if not text:
return []
chunks = []
i = 0
n = len(text)
while i < n:
end = min(i + max_len, n)
chunk = text[i:end].strip()
chunks.append(chunk)
if end == n:
break
i = end - overlap
return chunks
def expected_chunk_count(n, max_len, overlap):
"""用于断言块数量的理论值(不考虑 strip 带来的空块/空白变化)。"""
if n == 0:
return 0
if n <= max_len:
return 1
step = max_len - overlap
return math.ceil((n - max_len) / step) + 1
def test_param_validation():
# 类型错误
with pytest.raises(TypeError, match='text must be str'):
chunk_text(123, 5)
with pytest.raises(TypeError, match='text must be str'):
chunk_text(None, 5)
# 窗口参数非法
with pytest.raises(ValueError, match='invalid window params'):
chunk_text("abc", 0) # max_len < 1
with pytest.raises(ValueError, match='invalid window params'):
chunk_text("abc", 5, -1) # overlap < 0
with pytest.raises(ValueError, match='invalid window params'):
chunk_text("abc", 5, 5) # overlap >= max_len
# 合法边界值
assert chunk_text("a", 1, 0) == ["a"], "max_len=1, overlap=0 应产生单块"
assert chunk_text("", 1, 0) == [], "空文本且参数合法应返回空列表"
def test_empty_text_returns_empty():
assert chunk_text("", 5) == [], "空文本返回空列表(参数合法)"
def test_short_and_exact_length_text():
# 短于 max_len -> 单块
assert chunk_text("abc", 5, 0) == ["abc"], "短文本应返回单块,且内容被 strip"
# 等于 max_len -> 单块
assert chunk_text("abcde", 5, 0) == ["abcde"], "文本长度等于 max_len 应返回单块"
# 带首尾空白的短文本 -> strip 生效
assert chunk_text(" abc ", 10, 0) == ["abc"], "块应移除首尾空白"
def test_basic_chunking_no_overlap():
text = "abcdefgh"
max_len = 3
overlap = 0
chunks = chunk_text(text, max_len, overlap)
assert chunks == ["abc", "def", "gh"], "无重叠时分块应按固定步长推进"
assert all(isinstance(c, str) for c in chunks), "所有块类型应为 str"
assert all(len(c) <= max_len for c in chunks), "所有块长度应 <= max_len"
# 最后一块应包含文本的最后一个非空白字符
assert chunks[-1][-1] == text[-1], "最后一块应包含原文本末尾字符"
def test_chunking_with_overlap():
text = "abcdefgh"
max_len = 4
overlap = 2
chunks = chunk_text(text, max_len, overlap)
assert chunks == ["abcd", "cdef", "efgh"], "重叠窗口应产生预期序列"
# 重叠一致性:相邻块交叠部分相等
for i in range(len(chunks) - 1):
tail = chunks[i][-overlap:]
head = chunks[i + 1][:overlap]
assert tail == head, f"第{i}块尾部与第{i+1}块头部的重叠应一致"
assert all(len(c) <= max_len for c in chunks), "所有块长度应 <= max_len"
def test_maximal_overlap_step_one():
text = "abcdef"
max_len = 3
overlap = 2 # 极限重叠:步长为 1
chunks = chunk_text(text, max_len, overlap)
assert chunks == ["abc", "bcd", "cde", "def"], "极限重叠应产生滑动窗口步长为 1 的序列"
# 重叠一致性
for i in range(len(chunks) - 1):
assert chunks[i][-2:] == chunks[i + 1][:2], "相邻块的两个字符重叠应一致"
def test_trim_behavior_and_possible_empty_chunks():
text = " a b c "
max_len = 3
overlap = 1
chunks = chunk_text(text, max_len, overlap)
# 预期分块(分析 strip 后的结果)
assert chunks == ["a", "a b", "b", "c", ""], "strip 应移除首尾空白但保留内部空白,尾部可能产生空块"
# 所有块应已 strip(无首尾空白)
for c in chunks:
assert c == c.strip(), "每个块应无首尾空白"
# 内部空白保留(中间块应包含空格)
assert "a b" in chunks, "内部空白应被保留"
# 长度约束
assert all(len(c) <= max_len for c in chunks), "所有块长度应 <= max_len"
def test_expected_chunk_count_formula():
text = "abcdefghij" # 长度 10,末尾非空白,便于计数断言
max_len = 4
overlap = 1
chunks = chunk_text(text, max_len, overlap)
expected = expected_chunk_count(len(text), max_len, overlap)
assert len(chunks) == expected, "块数量应符合理论计数公式(无首尾空白干扰场景)"
def test_type_and_length_properties_regression():
# 多样文本场景下的基本性质断言(回归用)
samples = [
(" hello world ", 5, 2),
("xyz", 2, 1),
(" " * 8, 3, 1), # 全空白文本,strip 后可能出现空块
("123456789", 9, 8), # overlap = max_len-1
]
for text, max_len, overlap in samples:
chunks = chunk_text(text, max_len, overlap)
assert all(isinstance(c, str) for c in chunks), "所有块类型应为 str"
assert all(len(c) <= max_len for c in chunks), "所有块长度应 <= max_len"
# 空文本的特殊回归
if text == "":
assert chunks == [], "空文本应返回空列表"
断言说明
使用建议
代码分析摘要
断言设计思路
生成的断言代码
import re
import pytest
SAFE_CHAR = re.compile(r'^[A-Za-z0-9._-]$')
def sanitize_filename(name, max_len=64, default='file.txt'):
'''
Return a safe filename for saving user-provided names.
Rules:
- Type must be str; else raise TypeError
- Strip surrounding spaces
- If empty after strip -> return default
- Reject path separators '/' '\\' and parent refs '..' -> return default
- Replace illegal characters with '_' (allow letters, digits, '.', '_', '-')
- If result longer than max_len -> return default
- Prevent hidden files: leading '.' becomes '_'
'''
if not isinstance(name, str):
raise TypeError('name must be str')
name = name.strip()
if not name:
return default
if '/' in name or '\\' in name or '..' in name:
return default
cleaned = ''.join(c if SAFE_CHAR.match(c) else '_' for c in name)
if len(cleaned) > max_len:
return default
if cleaned.startswith('.'):
cleaned = '_' + cleaned.lstrip('.')
return cleaned
def test_type_error_for_non_str_inputs():
non_str_cases = [None, 123, 3.14, True, b'abc', ['x'], {'name': 'x'}]
for val in non_str_cases:
with pytest.raises(TypeError, match='name must be str'):
sanitize_filename(val)
def test_empty_after_strip_returns_default():
for name in ["", " ", " \t\n "]:
assert sanitize_filename(name) == "file.txt", "Empty after strip should return default"
def test_reject_path_separators_and_parent_refs():
bad_names = [
"a/b",
"a\\b",
"../secret",
"/etc/passwd",
"folder\\name",
"a..b", # 任意出现 '..' 都触发默认
]
for name in bad_names:
assert sanitize_filename(name) == "file.txt", f"Invalid path input '{name}' should return default"
def test_illegal_chars_are_replaced_with_underscore():
cases = {
"file name!.txt": "file_name_.txt",
"data\tset\n.csv": "data_set_.csv",
"🔥notes:2025?.md": "___notes_2025_.md",
"report(β).pdf": "report___.pdf",
}
for name, expected in cases.items():
assert sanitize_filename(name) == expected, f"Illegal chars in '{name}' should be replaced"
def test_hidden_file_leading_dot_is_prevented():
cases = {
".bashrc": "_bashrc",
"...env": "_env",
".": "_",
"...123": "_123",
}
for name, expected in cases.items():
assert sanitize_filename(name) == expected, f"Hidden file '{name}' should be made visible"
def test_length_limit_default_64():
assert sanitize_filename("a" * 64) == "a" * 64, "Length equal to max_len should be allowed"
assert sanitize_filename("a" * 65) == "file.txt", "Length greater than max_len should return default"
def test_length_limit_custom_max_len():
assert sanitize_filename("abc", max_len=3) == "abc", "Length equal to custom max_len should pass"
assert sanitize_filename("abcd", max_len=3) == "file.txt", "Exceeds custom max_len -> default"
def test_max_len_zero_and_negative():
assert sanitize_filename("abc", max_len=0) == "file.txt", "max_len=0 should always return default for non-empty"
assert sanitize_filename("abc", max_len=-1) == "file.txt", "Negative max_len should return default"
def test_default_parameter_is_respected():
assert sanitize_filename(" ", default="untitled") == "untitled", "Empty after strip should use custom default"
assert sanitize_filename("/bad", default="untitled") == "untitled", "Invalid path should use custom default"
def test_allowed_characters_are_preserved():
name = "good-Name_1.txt"
assert sanitize_filename(name) == name, "Allowed characters should be preserved"
name2 = "AZaz09._-"
assert sanitize_filename(name2) == name2, "Allowed ASCII set should pass unchanged"
def test_strip_surrounding_spaces_only():
assert sanitize_filename(" my.txt ") == "my.txt", "Should strip surrounding spaces"
def test_unicode_letters_are_replaced():
assert sanitize_filename("你好.txt") == "__.txt", "Non-ASCII letters should be replaced by '_' while keeping extension"
def test_path_separators_do_not_get_sanitized_but_defaulted():
assert sanitize_filename("a/b.txt") == "file.txt", "Slash must force default, not underscore replacement"
assert sanitize_filename("a\\b.txt") == "file.txt", "Backslash must force default, not underscore replacement"
断言说明
使用建议
面向研发与测试团队,快速把“代码+测试意图”转化为可直接落地的断言方案:自动识别关键校验点,生成清晰易读的断言,覆盖正常与边界情况,并附带解释与使用建议。帮助你显著缩短单测编写时间、提升覆盖率与可维护性,降低回归风险,在重构守护、接口校验、数据处理验证等场景中稳定输出专业结果,促进从试用到团队化付费的效率提升。
在开发与重构时,快速为关键函数与后端服务编写断言,覆盖正常与异常路径,几分钟搭起可回归的单元测试,提前拦截逻辑回归与边界缺陷。
将需求转为可执行断言清单,批量生成可读失败信息的断言,用更少时间提升覆盖率;在日常提测中快速定位缺陷来源,沉淀可复用的用例模板。
为数据清洗、聚合、导出环节添加完整性与范围校验,自动捕捉空值、重复、异常分布,一键生成断言脚本,保障报表与模型输入可靠。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
半价获取高级提示词-优惠即将到期