菜单

测试

相关源文件

本文档概述了 Shadowsocks Windows 客户端中使用的测试基础设施和实践。它涵盖了测试框架、当前测试覆盖率、如何运行测试以及贡献新测试的指南。

有关从源代码构建项目的信息,请参阅从源代码构建

测试框架

Shadowsocks Windows 使用微软的 Visual Studio 测试框架 (MSTest) 进行单元测试。这通过 Microsoft.VisualStudio.TestTools.UnitTesting 命名空间实现,该命名空间提供了用于创建和运行单元测试的属性、断言和测试运行器。

测试结构

测试组织在解决方案中的一个独立测试项目中

来源:test/UnitTest.cs

目前,测试项目包含

  • test/ - 包含测试代码的目录
    • UnitTest.cs - 包含各种组件的测试方法

测试类使用 [TestClass] 属性标记,而单个测试方法则使用 [TestMethod] 属性,遵循标准 MSTest 约定。

当前测试覆盖率

目前的测试覆盖率主要集中在热键系统

来源:test/UnitTest.cs17-42

现有测试方法

测试方法描述测试组件
TestHotKey2Str测试从按键组合到字符串表示的转换Controller.Hotkeys.HotKeys
TestStr2HotKey测试从字符串表示到热键对象的转换Controller.Hotkeys.HotKeys

TestHotKey2Str

此方法测试热键组合(由一个键和修饰键组成)转换为其字符串表示的功能。它验证了修饰键(Ctrl、Alt、Shift)与不同键的各种组合是否正确格式化为字符串。

来源:test/UnitTest.cs18-25

TestStr2HotKey

此方法测试将字符串表示转换回 HotKey 对象的功能。它确保“Ctrl+A”等字符串能够正确解析为相应的键和修饰键组合。

来源:test/UnitTest.cs27-42

运行测试

运行测试

  1. 在 Visual Studio 中打开 Shadowsocks 解决方案
  2. 构建解决方案以确保所有依赖项都已解决
  3. 打开测试资源管理器(测试 > 测试资源管理器)
  4. 点击“全部运行”或选择特定测试运行

或者,您可以从命令行运行测试

dotnet test

测试流程

项目中典型的测试工作流程遵循以下模式

编写新测试

为 Shadowsocks Windows 贡献代码时,建议为新功能添加测试。以下是添加新测试的方法

  1. test 目录中确定适当的测试类或创建一个新类
  2. 添加名称清晰、描述性强且以 Test 为前缀的测试方法
  3. 每个测试方法都使用 [TestMethod] 属性
  4. 遵循 Arrange-Act-Assert 模式

测试最佳实践

编写 Shadowsocks Windows 测试时,请考虑以下最佳实践

  1. 测试隔离:每个测试都应独立,不依赖于其他测试创建的状态
  2. 描述性名称:使用清晰、描述性的名称来表明正在测试什么
  3. 测试单一概念:每个测试方法都应专注于测试一个单一概念
  4. 覆盖边缘情况:包含针对边界条件和错误场景的测试
  5. 保持测试快速:测试应快速运行以鼓励频繁执行
  6. 测试公共 API:侧重于测试公共接口而不是实现细节
  7. 使用适当的断言:为每次验证选择最具体的断言方法

测试改进领域

可以从额外测试覆盖中受益的组件包括

  1. 核心控制器逻辑ShadowsocksController
  2. 网络组件ListenerTCPRelayUDPRelay
  3. 加密Encryption 命名空间中的加密/解密逻辑
  4. 配置:配置加载、保存和验证逻辑
  5. PAC 系统:代理自动配置系统
  6. UI 组件:用户界面交互

集成测试

除了单元测试,项目还将受益于验证组件之间交互的集成测试,例如

  1. 端到端代理功能
  2. 配置加载和应用
  3. PAC 规则生成和应用
  4. 系统代理配置

测试故障排除

如果在运行测试时遇到问题

  1. 确保所有依赖项都已正确解决
  2. 检查测试项目是否引用了主项目的正确版本
  3. 查找可能影响测试的任何特定于环境的配置
  4. 验证测试环境中是否提供了所有必需的资源(文件、网络连接)

来源:test/UnitTest.cs