修好数据版本测试的偶发失败:几条断言靠「第二版的 100 不在报错原文里」证明没改用当前版本,原文里却带着十六进制的随机源名,约五百个名字就有一个含「100」,断言无缘无故变红(和并行、时序、文件句柄无关);源名改成只有字母,另加一条守住这个约定

This commit is contained in:
ThearchyHelios
2026-10-05 18:45:59 +08:00
parent 64b6586ecc
commit 7083d5c457
+17 -1
View File
@@ -91,8 +91,24 @@ V1 = {"明细": [["区域", "数量"], ["分区甲", 1], ["分区乙", 2]]}
V2 = {"明细": [["区域", "数量"], ["分区甲", 60], ["分区乙", 40]], "新增": [["时段", "客流"], ["上午", 7]]}
#: 十六进制里的数字换成字母:名字里不带数字
_NO_DIGITS = str.maketrans("0123456789", "ghijklmnop")
def uniq(prefix: str = "dv") -> str:
return f"{prefix}_{uuid.uuid4().hex[:10]}"
"""一个不会重复的源名,只有字母。
报错原文里有源名(「数据源「dv_…」」),不少断言靠「第二版的 100 不在原文里」证明没有改用当前版本。十六进制名字
每 500 个左右就有一个带着「100」(dv_3a100bc2ef),那几条断言就会无缘无故地失败——这正是
test_snapshot_file_deleted_after_tools_were_built 偶尔失败的原因,和并行、时序无关。名字里不带数字,数字的断言
才只看得见数据。"""
return f"{prefix}_{uuid.uuid4().hex[:12].translate(_NO_DIGITS)}"
def test_source_names_carry_no_digits():
"""守住 uniq 的约定:名字里一个数字都没有,报错原文里出现的数字只能来自数据(见 uniq 的说明)"""
names = {uniq() for _ in range(2000)}
assert len(names) == 2000 and not any(ch.isdigit() for name in names for ch in name.removeprefix("dv_"))
async def publish(name: str, sheets: dict[str, list[list]]) -> tuple[str, str]: