用途:为 .NET MAUI 应用提供 xUnit 单元测试的注意事项与最佳实践,帮助搭建可测试的 ViewModel 层并配置测试项目。
主要能力:涵盖测试项目搭建、ViewModel 测试模式、MAUI 服务模拟策略、代码覆盖率与设备端测试运行器;提供 xUnit 示例、项目模板与 CLI 命令参考(见 references/unit-testing-api.md)。
关键要点与限制: TFM 陷阱:xUnit 无法在平台专属 TFM 上运行,测试项目应使用普通 .NET TFM(如 net9.0;net10.0),而非 net9.0-ios。 OutputType 陷阱:测试项目引用应用项目时,应用会尝试以 Exe 构建测试 TFM 而失败,需按 TFM 条件设置 OutputType(测试 TFM 为 Library,平台 TFM 为 Exe)。 常见错误:ViewModel 直接调用静态 MAUI API(如 Shell.Current、Application.Current、SecureStorage.Default、Connectivity.Current)不可测试,应封装为可注入接口,例如 Shell.Current 封装为 INavigationService,SecureStorage.Default 封装为 ISecureStorage,Connectivity.Current 封装为 IConnectivity。避免断言 UI 绑定(如 label.Text),应断言 ViewModel 属性与 CanExecute。 模拟策略:ISecureStorage、IPreferences、IConnectivity、IGeolocation、IFilePicker、IMediaPicker 均用 Mock 返回固定值;Shell 导航抽象为 INavigationService;IDispatcher 打桩为同步调用。 架构建议:采用接口优先设计,在 MauiProgram.cs 注册实现并注入 ViewModel;使用 ObservableCollection<T> 与 MVVM Toolkit 的 [ObservableProperty];用 TaskCompletionSource 测试异步等待流程;在 CI 中运行 dotnet test;设备端测试用 xunit.runner.devices 访问真实平台 API(传感器、相机、蓝牙)。
检查清单:测试项目面向普通 net9.0/net10.0;应用项目按 TFM 条件设置 OutputType;静态 API 均封装为可注入接口;测试 ViewModel 属性与命令而非 UI 绑定;IDispatcher 模拟为同步调用;CI 中 dotnet test 通过。
收费、价格、平台与效果等具体信息暂未提供。