dotnet test静默空跑_filter匹配0个测试,险些误了大事

简介: `dotnet test` 用文件名写 `--filter` 却匹配不到类名,导致0测试执行、退出码仍为0——“全绿假象”。静默空跑比失败更危险!防坑三招:①先`--list-tests`查真实类名;②filter用完整类名而非文件名;③脚本校验TRX中`executed>0`。

这是一个真实的坑:dotnet test 匹配到 0 个测试,却以退出码 0、全绿收场。


一、引子:我以为跑了 12 个测试,结果跑了 0 个

某天我在测试项目里加了一个新用例文件,然后跑:

dotnet test --filter "FullyQualifiedName~NativeDriverIntegrationTests"

输出很快,全绿,退出码 0。我以为 12 个集成测试都过了。

直到我打开 TRX 报告想看一眼结果明细,发现汇总里写着:

<Counters total="0" executed="0" passed="0" failed="0" />

一个测试都没执行。 而 dotnet test 的退出码是 0——命令成功了。
4AC3D79B-C5E3-4A44-BB67-37E2AB05DFAE.PNG

二、根因:文件名 ≠ 类名

问题出在我用文件名写 filter,而那个文件里的类名根本不是它:

文件:Drivers/NativeDriverIntegrationTests.cs
类:  SiemensS7Integration / ModbusTcpIntegration / MitsubishiMcIntegration ...
      ↑ 没有任何一个类叫 NativeDriverIntegrationTests

--filter "FullyQualifiedName~NativeDriverIntegrationTests" 匹配不到任何测试 → 0 个执行 → 退出码 0。

这不是我一个人的问题:同一个仓库里还有 RealS7HundredPlcStressTests.cs(类名其实是 RealS7StressTests)——文件名和类名不一致在项目里不止一处,尤其当文件是"多类合放"或"历史命名迁移"时很常见。

三、为什么它比"测试失败"更危险

失败是显性的——红了你会去查。静默空跑是隐性的:

  • CI 全绿、覆盖率为零、你还以为"测过了";
  • 它在每个你不知道的时候发生:filter 写错、类被改名、文件被合并——都是静默的;
  • 和"跳过记通过"是同一个家族的病:"没测到"和"通过"在外观上没有区别。

四、三个防坑动作(一条命令 + 一条习惯 + 一条脚本校验)

1. 跑之前,先 --list-tests 看真实类名

dotnet test --filter "FullyQualifiedName~NativeDriverIntegration" --list-tests
# 输出为空 → filter 必错;输出列出 FQN → 用列出来的名字过滤

用类名(而不是文件名)写 filter:

dotnet test --filter "FullyQualifiedName~SiemensS7Integration"

2. 习惯:filter 里带上"必匹配"的锚

如果目标是"这个类",写成 FullyQualifiedName~SiemensS7Integration 而不是可能空匹配的名字;避免用"太短/太常见"的子串(~Integration 可能匹配 5 个类,~NativeDriverIntegrationTests 匹配 0 个,都不符合直觉)。

3. 脚本里校验"真的跑了"

在自动化脚本/CI 步骤里,别只信退出码:

# 解析 TRX 或 --logger 输出,断言 executed > 0,否则以非 0 退出
grep -q 'executed="[1-9]' result.trx || {
    echo "0 个测试被执行,视为失败"; exit 1; }

这一步是"防假绿":"没测到"必须显式失败,而不是静默通过(我们给压测套件配的防假绿哨兵,就是这个思路的通用版)。

五、收尾一句

测试框架的"退出码 0"只表示"命令没出错",不表示"测了什么"。 凡是"全绿但覆盖为零"的场景,都值得怀疑——尤其是 filter、条件编译、Skip 这三类最容易静默的地方。


我们做工业数据采集(PLC 批量采集引擎)。这篇文章来自我们测试体系的真实排障(同一个坑在仓库里出现不止一次);免费版 10 台、协议全开、可读可写、完整编排。


获取与授权:ZL.IotHub —— 工业 PLC 数据采集运行时,22 种自研原生驱动
(西门子 S7 / 三菱 MC / 欧姆龙 FINS / AB / 倍福 ADS / Modbus 全系 / 台达 / 汇川 / 信捷 /
埃斯顿 / 基恩士 / 松下 / DALI / DLMS / M-Bus / HART-IP / MTConnect / HTTP-REST 等),
内置地址合并批量读取、坏点隔离与变化上报、DataChange 事件。
可以用于数据采集,设备控制,SCADA 等系统的底座,编程简单,运行稳定高效。

免费版:≤10 台设备、协议全开、可读可写,直接用于生产验证;超过 10 台需正式设备授权。
**安装:dotnet add package ZL.IotHub
(NuGet 页面)
示例(可直接运行):https://github.com/qwdingyu/ZL.IotHubDemo

相关文章
|
24天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9478 31
|
1天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1154 0
|
10天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
9天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
716 1
|
5天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型全解析:核心原理拆解,性能实战测评与落地部署教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为System One Model(系统一模型),对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
467 0
|
22天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
2545 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
4天前
|
存储 缓存 测试技术
QWT 3D 模块重构记:旧渲染管线改进介绍及实时瀑布图示例
QWT 3D模块完成重大重构:解耦窗口与图形(Plot+Item),摒弃OpenGL 1.x固定管线,迁至Core Profile着色器渲染;支持多图元同场景叠加,并以实时3D瀑布图验证——滑动窗口、固定色域、64帧×256点达61fps。兼容Qt 5.12+/6,LGPL协议。
176 120
|
16天前
|
Windows
【保姆级】.NET Framework 3.5离线安装教程(2026最新实测)
.NET Framework 3.5是微软经典运行库,专为兼容老软件、老游戏设计。Win7自带,Win10/11需手动启用(在线或离线安装)。它与4.x系列并存不冲突,缺它会导致“找不到组件”报错。本文详解两种安装方式及常见问题解决,小白也能轻松上手。(239字)
2076 0

热门文章

最新文章