python-engineering
Python 工程化开发规范:虚拟环境隔离、标准项目结构、依赖锁定、pytest 单元测试、ruff 代码检查与打包发布流程
目录 / 开发工具 / r-testthat
使用 testthat 3+ 为 R 包编写与组织单元测试的实践指南 本指南旨在为 R 包开发者提供一套系统、现代、可维护的单元测试实践方案,全面覆盖 testthat 3+ 的核心功能与最佳实践。适用于编写、整理或改进 R 包的测试代码,尤其适用于触发场景如:单元测试、R 包测试、期望断言、快照测试、依赖模拟、测试夹具、状态清理、行为驱动开发等。 一、测试文件与包结构的镜像组织 遵循“镜像结构”原则,将测试文件与源码文件一一对应,便于定位与维护。 推荐结构: ``` your_package/ ├── R/ │ ├── utils.R │ ├── model.R │ └── plot.R ├── tests/ │ ├── testthat/ │ │ ├── test-utils.R │ │ ├── test-model.R │ │ └── test-plot.R │ └── testthat.R ``` - 每个 R/ 下的 .R 文件对应 tests/testthat/ 下的一个 test-*.R 文件。 - 使用 testthat::use_testthat() 初始化测试框架。 - 在 tests/testthat.R 中调用 testthat::test_check("your_package") 以支持 R CMD check。 二、文件-测试-期望三层结构 采用“文件 → 测试组 → 期望断言”三层结构,提升可读性与组织性。 ```r # tests/testthat/test-utils.R test_that("utils functions work correctly", { expect_equal(normalize_path("~/file"), normalize_path("~/file")) expect_true(is.character(normalize_path("~/file"))) }) ``` - 外层:test_that() 定义一个逻辑测试组。 - 中层:多个 expect_* 断言组成一个完整行为验证。 - 内层:每个 expect_* 表达一个明确期望。 三、自足式测试设计(Self-contained Tests) 每个测试应独立运行,不依赖外部状态或执行顺序。 ✅ 正确做法: ```r test_that("data cleaning works", { df <- data.frame(x = c(1, NA, 3), y = c("a", "b", NA)) result <- clean_data(df) expect_equal(nrow(result), 1) }) ``` ❌ 避免: ```r # 依赖全局变量或前序测试状态 df <<- data.frame(x = 1:3) test_that("something", { ... }) ``` 四、withr 状态清理(State Cleanup) 使用 withr 包安全地临时修改全局状态(如选项、环境变量、工作目录等),并在测试后自动恢复。 ```r test_that("plot saves correctly", { withr::with_dir(tempdir(), { save_plot(plot_data, "test.png") expect_true(file.exists("test.png")) }) # 工作目录自动恢复 }) ``` 常用 withr 函数: - withr::with_options():临时修改 options - withr::with_envvar():临时设置环境变量 - withr::with_par():临时修改图形参数 - withr::with_tempfile():创建临时文件 - withr::with_tempdir():创建临时目录 五、测试夹具构造(Test Fixtures) 使用 setup 和 teardown 机制管理共享资源。 ```r # tests/testthat/setup.R setup({ # 创建测试数据库连接或模拟数据 test_db <<- connect_to_test_db() }) teardown({ # 清理资源 disconnect(test_db) }) ``` 或在 test_that 中使用局部夹具: ```r test_that("user authentication", { user <- create_test_use...
| 版本 | 存档时间 | 内容哈希 | 内容 |
|---|---|---|---|
| v1 | 2026-11-13 22:05 | 86c45263 | 可取 |
版本索引永久保留;内容副本只保留最新 1 份,更早版本仅留索引与哈希(存档时间线的证据链不会因此断裂)。
Python 工程化开发规范:虚拟环境隔离、标准项目结构、依赖锁定、pytest 单元测试、ruff 代码检查与打包发布流程
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)
Vitest 单元测试:组件/函数测试、mock/spy 策略与覆盖率配置
生成、改进并分析 Java 单元测试,基于白盒测试设计测试用例,适用于所有 CLI 工具
Netsnek e
当用户要补单元测试、生成测试桩与 Mock 数据时使用
侵权举报经核验成立后,我们会即时下线该条目并删除已存的内容副本。