<p>断言失败时看不到具体差异,需调整测试框架参数:pytest 加 -vv 和 --tb=short,Jest 用 toStrictEqual() 或手动日志,Q# 确保 Reset 并换 TraceSimulator。</p>

断言失败时看不到具体差异?检查 pytest 的 -vv 和 --tb 参数
pytest 默认只显示断言语句和报错行,不展开实际值对比。你写 assert a == b 失败后只看到 AssertionError,但不知道 a 是 ['x', 'y'] 而 b 是 ['x', 'z']——这是最常见的“断言提示缺失”现象。
根本原因不是 VSCode 问题,而是 pytest 命令本身没传足够参数。VSCode 测试资源管理器底层调用的就是 pytest CLI,它默认用的是 --tb=short 和 -v 级别。
- 在
settings.json中把python.testing.pytestArgs改成:["--tb=short", "-vv", "--rootdir=."] -
-vv让 pytest 输出更详细的断言差异(比如列表/字典逐项比对) -
--tb=short不是必须,但能避免堆栈过长淹没关键信息;想看完整堆栈可换--tb=long - 如果测试文件里用了
print(),加-s才能在输出面板看到(但会干扰结构化结果,慎用)
VSCode 调试模式下断点跳过 assert?确认是否启用 justMyCode
你在 test_xxx.py 里打了断点,运行 “Debug Test” 后断点灰色不可命中,或者直接跳过 assert 行——大概率是调试配置里 justMyCode 设为 true 导致的。
VSCode 的 Python 调试器默认过滤掉非当前工作区代码,而 pytest 的内部断言逻辑(如 pytest._code.code)被判定为“非我的代码”,于是整个 assert 检查流程被跳过,自然无法停在断言失败前那行。
- 打开
.vscode/launch.json,找到对应 pytest 的配置块 - 把
"justMyCode": true改成false - 重启调试会话,断点就能停在
assert行上,你可以手动 inspecta和b的值 - 注意:设为
false后可能停进 pytest 源码,遇到陌生堆栈别慌,按F10步过即可
Jest 的 toEqual() 提示太简略?改用 toStrictEqual() 或自定义 expect
Jest 默认的 expect(a).toEqual(b) 在对象深度相等时只告诉你 “expected X, received Y”,不标出哪一层嵌套出了问题。尤其当 a 和 b 都是 5 层嵌套对象时,肉眼根本找不到差异点。
- 优先换用
expect(a).toStrictEqual(b):它做严格相等(===),且错误信息会高亮第一个不匹配字段(比如user.profile.avatar) - 若仍需宽松比较,加一行
console.log(JSON.stringify(a, null, 2))和console.log(JSON.stringify(b, null, 2))对比(记得测试完删掉) - 复杂场景可封装:
expect(diff(a, b)).toBe(''),其中diff()是你自己写的浅层 key 对比函数 - 不要依赖 Jest 的
toMatchSnapshot()来替代断言——快照只是存值,不表达业务意图
Q# 测试中 AssertEqualD 不报具体值?检查模拟器和 Reset 调用
Q# 的 AssertEqualD 在失败时只说 “assertion failed”,不打印期望值和实际值——这不是 VSCode 的锅,是 QDK 模拟器本身的日志策略。
它只在 QuantumSimulator 下提供基础断言信息,且前提是量子比特已被正确释放。如果漏掉 Reset(q),后续测试可能因状态残留失败,错误信息反而更模糊。
- 确保每个带
@Test的操作末尾都有Reset(q)或ResetAll(qs) - 换用
TraceSimulator运行:它会在控制台输出更详细的门序列和中间测量值,便于定位哪一步出错 - 实在需要值对比,改用
Message($"Expected {expected}, got {actual}")+Assert组合,手动打日志 - VSCode 的 Q# 扩展不增强断言提示,所有提示都来自
dotnet test输出,别指望侧边栏弹窗里有 diff
断言提示本质上是测试框架 CLI 的输出能力,VSCode 只负责捕获和展示。真正要调的不是编辑器设置,而是你传给 pytest、jest 或 dotnet test 的那一串参数。参数没对,再好的 UI 也吐不出有用信息。


















