SuperAPI AI 工具集

maui-unit-testing

测试与质量

查看项目

更新于 10-15 21:12

技能介绍

用途:让 MAUI 应用逻辑可测试,无需每个测试都启动设备或模拟器,把 UI 框架依赖留在边缘。

主要能力与工作流:先确定测试对象(ViewModel、服务、导航抽象、存储包装、平台能力或 UI 集成)。ViewModel 与服务用普通 xUnit 测试项目;为地理定位、偏好设置、安全存储、媒体选择器、文件选择器、导航等平台 API 引入接口;单元测试中使用 fake 或 mock。仅对需要 handler、平台权限、原生控件或 OS 服务的行为使用设备/集成测试。若测试或工具项目必须引用 MAUI 应用项目,使用 Microsoft.Maui.Build.AppProjectReference 提供的 AppProjectReference 支持,而不是把应用项目当作普通类库。

测试边界:ViewModel 命令、校验、状态转换用单元测试;带 fake handler 的 API/数据服务用单元测试;带 fake 存储的安全存储包装行为用单元测试;Shell 路由字符串与导航抽象调用用单元测试;handler 渲染、原生权限、真实选择器用设备/集成测试;运行中应用的端到端 UI 流程用 DevFlow/运行时自动化。

ViewModel 测试模式:至少包含一条正常路径和一条错误/边界用例,可用 NSubstitute、Moq 或手写 fake。平台抽象优先使用内置接口(如 IGeolocation、IFileSystem、IPreferences、IConnectivity、ISecureStorage);需要组合平台 API、归一化错误或暴露应用专属契约时再自定义包装。ViewModel 依赖 ILocationService 等接口,而非直接调用 Geolocation.Default。

反模式:普通 ViewModel 单元测试中不要调用 MauiProgram.CreateMauiApp();不要为只验证 C# 状态转换的测试要求模拟器;不要在需要确定性单元测试的逻辑中直接使用静态 MAUI 平台服务;不要在同步 ViewModel 命令逻辑中调用 MainThread.BeginInvokeOnMainThread 或 Dispatcher.Dispatch;不要把 UI 自动化期望放进单元测试。

校验清单:ViewModel 测试无需设备即可运行;平台 API 位于接口或包装之后;测试项目引用遵循仓库包管理约定;仅设备行为与可单元测试逻辑明确分离。