lolPing 桌面应用怎么测:测试与 CI 实践完整清单
【免费下载链接】lolPingLeague of Legends ping wheel for your Windows desktop. Hold Alt, drag, and ping anywhere, with the original animations and sounds.项目地址https://gitcode.com/gh_mirrors/lo/lolPing点击查看免费下载lolPing 是一个给 Windows 和 macOS 桌面用的英雄联盟风格 ping 轮盘按住 Alt 拖拽、松手即可在任何位置发出 ping带有原汁原味的动画和音效。这类应用有个特殊的测试难题——它要监听全局鼠标键盘、画透明悬浮窗很难直接用 UI 自动化碰它。这个项目用纯逻辑抽离 协议模拟 假进程替身的组合拳把大部分行为变成了不碰 UI 就能跑的单测再由 GitHub Actions 在 Windows 和 macOS 双平台把关。下面是一份完整的清单式盘点。一、测试分层一个应用三套测试lolPing 的代码分为两层ElectronTypeScript负责窗口、悬浮层和房间协议C 进程 hook-helper 负责底层的输入钩子Windows 全局钩子 / macOS event tap。对应地测试也分三层全部由 vitest.config.ts 和 run.mjs 驱动层跑什么命令位置C 纯逻辑手势状态机Decisionnpm run test:helperhelper_tests.cpp协议集成启动真实 helper 的--simulate模式喂模拟按键npm testprotocol.test.tsTypeScript 单测主进程、渲染层、共享模块npm testtests/ 核心思路只有一句话把决策从胶水里抽出来测决策不测胶水。钩子拿到按键后做什么全部由一个纯函数状态机 decision.cpp 决定C 测试直接向状态机灌入事件序列断言它该吞掉哪些输入、该向 Electron 发什么事件——完全不需要真实的鼠标键盘。二、TypeScript 测试40 个文件镜像 src 结构测试目录 tests/ 与源码 src/ 一一对应tests/main/对应src/main/tests/shared/对应src/shared/。几个有代表性的做法值得借鉴1. 假替身fixtures替代真实依赖tests/main/fixtures/ 里放着一套替身演员fake-helper.mjs用 Node 脚本冒充 C helper。它能模拟三种状态——正常回显、启动即崩溃、macOS 无辅助功能权限退出。于是 inputBridge.test.ts 可以稳定复现helper 崩溃 3 次后放弃重启无权限时不盲目重启这类故障恢复逻辑。fakeSocket.tsWebSocket 替身测试想让它打开就打开、想断线就断线relayConnection.test.ts 借此覆盖了 Nostr 中继的订阅、重连和回声去重。fakeTransport.ts 与 fakeRelay.ts把局域网 UDP 和中继网络都换成内存管道房间加密、防重放等逻辑如 roomCrypto.test.ts、replayGuard.test.ts因此零真实网络。2. 确定性三板斧注入时间、注入随机、等待条件以 floodGuard.test.ts 为例时间不是Date.now()而是外部传入的now: () number测试用advance(1000)手动拨快时钟验证限流预算随时间回血。项目规范AGENTS.md明确写着不写固定 sleep等条件而不是等时间。npm run typecheck # 类型检查 npm run test:helper # 构建并跑 C 测试 npm test # 跑全部 TypeScript 测试3. 连 CI 脚本本身也有测试最有意思的一条releaseWorkflow.test.ts 直接读取 release.yml 的文本用断言锁死发布流程的顺序——比如平台 job 里绝不能出现--draftfalse、Windows job 必须上传latest.yml和 blockmap。工作流改错了测试会先红给你看。三、CI 双平台一次推送两道门禁CI 定义在 ci.ymlmain分支推送和每个 PR 都会触发两个并行 jobtestwindows-latestnpm ci→typecheck→test:helper编译 hook-helper.exe 并跑 C 测试TypeScript 协议测试依赖这个产物→npm test→npm run build与build:site保证能打包、演示页能构建。test-macmacos-latestApple Silicon同样的测试链外加dist:mac完整出包再用codesign --verify校验签名、确认 hook-helper 是 arm64、托盘图标在位最后把.dmg作为 artifact 保留 14 天。两个细节很实用macOS 上设置了CSC_FOR_PULL_REQUEST: truearm64 未签名 app 根本启动不了PR 上也必须做 ad-hoc 签名权限只给contents: read最小化 CI 的越权能力。四、发布流水线测试是发布的入场券release.yml 在推送形如v0.5.1的 tag 时触发同样先跑test:helper和npm test通过才允许出安装包。它的顺序被设计成草稿发布模式先建 draft release → Windows 和 macOS job 分别上传安装包与latest.yml/blockmap → 最后由 publish job 转正。这样已安装应用读取更新时不会遇到latest.yml 还没上传的失败窗口。五、清单改动合入前跑一遍npm run typecheck类型零报错npm run test:helperC 状态机测试通过npm test全部 Vitest 通过新逻辑带测试修 bug 带不修就红的测试涉及输入、悬浮窗、声音的改动额外用npm run dev在对应系统上手跑一遍——测试绿了不等于 UI 没问题双平台行为一致平台差异用 platform.ts 或 hook-helper 各自的hooks_win.cpp/hooks_mac.cpp隔离需要人工验证的场景如房间可用 tools/room-peer 造一个假队友在单机上压测lolPing 这套实践对新手的最大启发是桌面应用不必靠点鼠标来测。把状态机、协议、限流、加密都做成可注入时间的纯模块再配一套假进程和假 socket绝大多数逻辑都能在 CI 里零 UI 地跑起来剩下的少量手感问题留给人和真机。赞分享【免费下载链接】lolPingLeague of Legends ping wheel for your Windows desktop. Hold Alt, drag, and ping anywhere, with the original animations and sounds.项目地址https://gitcode.com/gh_mirrors/lo/lolPing点击查看免费下载相关推荐Eel桌面应用测试终极指南单元测试与集成测试完整方案Eel桌面应用测试终极指南单元测试与集成测试完整方案 Eel是一个强大的Python库用于创建简单的桌面GUI应用程序它使用HTML/CSS/JS作为前端桌面应用前端Moby 单元测试与集成测试怎么运行make test-unit 与 test-integration 目标怎么选Moby 单元测试与集成测试怎么运行make test unit 与 test integration 目标怎么选 在 MobyDocker Engine容器运行时云原生容器编排网络存储97.5%测试覆盖率怎么做到md2_cj测试设计与cjpm覆盖率报告完整实践97.5%测试覆盖率怎么做到md2_cj测试设计与cjpm覆盖率报告完整实践 md2_cj 是用 仓颉语言 实现的 MD2 消息摘要算法 库官方测试覆盖率达密码学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考