尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何参与Scanner开源开发:UWP单元测试写法详解与v4重写路线图前瞻

如何参与Scanner开源开发:UWP单元测试写法详解与v4重写路线图前瞻 如何参与Scanner开源开发UWP单元测试写法详解与v4重写路线图前瞻【免费下载链接】scannerAn all-in-one scanner app for Windows项目地址: https://gitcode.com/gh_mirrors/scanner/scannerScanner 是一款构建在 UWP通用 Windows 平台上的一体化扫描应用支持所有 WIA 兼容扫描仪可扫描保存为 PDF、自动旋转页面并内置编辑功能。本文以仓库中自带的单元测试为范例一步步带你上手 UWP 单元测试写法与项目协作方式让新手也能快速向 Scanner 开源项目贡献代码并前瞻 v4 完整重写路线图。准备工作克隆Scanner仓库并搭建UWP开发环境参与 Scanner 开源开发你只需要三样装备Visual Studio 2022勾选通用 Windows 平台开发工作负载Windows 10 / 11项目最低支持 Windows 10 1809即 10.0.18362任意 git 客户端一条命令克隆仓库git clone https://gitcode.com/gh_mirrors/scanner/scanner用 Visual Studio 打开Scanner/Scanner.sln后你会看到三个工程主应用Scanner、打包工程Scanner.Package以及本文重点的单元测试工程UnitTests。UWP单元测试项目结构UnitTests目录里有什么与传统 .NET 测试不同UWP 单元测试运行在 AppContainer 沙箱中因此测试工程UnitTests看起来更像一个小应用。关键文件一览文件作用UnitTests/UnitTests.csproj声明测试框架引用输出类型为AppContainerExeUnitTests/UnitTestApp.xaml.cs测试宿主入口启动时调用UnitTestClient.Run(e.Arguments)执行测试UnitTests/Package.appxmanifest打包清单让测试能以 UWP 应用形式安装运行UnitTests/DiscoveredScannerUnitTests.cs扫描仪发现、亮度/对比度配置测试类UnitTests/ScanResultUnitTests.cs扫描结果页面合并索引测试类从工程文件里能看到三个测试相关的库MSTest.TestFramework MSTest.TestAdapter3.6.1提供[TestClass]、[TestMethod]、Assert等基础能力Moq4.20.72模拟Windows.Devices.Scanners中的接口让测试无需真实扫描仪硬件TestPlatform.Universal SDK使测试工程可打包、可部署这也解释了为什么 UWP 单元测试要在 Visual Studio 测试资源管理器里运行——IDE 会把测试工程打包安装并启动然后回传执行结果。写法详解一用Moq模拟扫描仪硬件生成配置测试扫描仪 App 写测试最容易踩的坑是测试不能依赖真实硬件。UnitTests/DiscoveredScannerUnitTests.cs给出了标准答案——用 Moq 模拟IImageScannerSourceConfiguration接口后喂数据。以亮度配置测试为例流程分四步准备创建 mock 对象为MinBrightness、DefaultBrightness、MaxBrightness、BrightnessStep定义返回值调用执行被测静态方法DiscoveredScanner.GenerateBrightnessConfig实现在Scanner/Models/DiscoveredScanner.cs断言用Assert.IsNotNullAssert.AreEqual逐字段校验输出边界覆盖步进为 0 时返回 null、大步进20/33、默认值贴边时吸附到最近合法值VirtualDefaultBrightness这种以边界场景命名的测试用例如TestGenerateBrightnessConfigBigStep、TestGenerateBrightnessConfigInvalidStep是新手值得模仿的好习惯——看名字就知道每个用例守住了什么场景。写法详解二断言驱动的页面合并索引测试Scanner 支持把新扫描结果合并进已有 PDF而插到哪一页的数学计算其实很绕尤其是倒序插入。UnitTests/ScanResultUnitTests.cs直接瞄准ScanResult.GetNewIndexAccordingToMergeConfig实现在Scanner/Models/ScanResult.cs构造一个插入索引为{0, 2, 4}、多余页起始位为 5 的ScanMergeConfig逐页遍历断言每一页的目标位置都符合预期Reversed变体用例额外验证倒序插入时forInsertion参数的语义差异整个类只有两个测试方法却覆盖了正向插入与倒序插入两大场景说明少而精的用例足以锁死一个纯函数算法。这也是新手熟悉Arrange–Act–AssertAAA三段式的最佳起点先搭数据、再调方法、最后断言。v4重写路线图前瞻当前维护期可以做什么项目 README 明确说明Scanner 正在推倒重来进行 v4 全面重写现有版本进入维护模式新功能贡献大概率不会进入发布渠道。但这并不意味着新手无法参与反而——测试资产在重写期的价值被放大了补全纯逻辑测试覆盖现有测试只覆盖亮度/对比度配置与合并索引两处文件命名Scanner/Models/FileNaming/等纯逻辑模块都是可补测试的方向本地化贡献项目已支持简体中文等 22 种语言见Scanner/Resources/Localization/是最容易上手的贡献入口关注 v4 主线v4 发布后现有UnitTests的测试风格MSTest Moq AppContainer 宿主可直接作为参考记住这条公式克隆仓库 → 运行 UnitTests → 为一个纯函数补上边界测试 → 提交 PR。这就是参与 Scanner 开源开发、拿到第一个被采纳贡献的最快路径。【免费下载链接】scannerAn all-in-one scanner app for Windows项目地址: https://gitcode.com/gh_mirrors/scanner/scanner创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表