该技能用于为 R 包函数编写基于 testthat 第 3 版的完整测试,适用于为新函数添加测试、提升既有代码覆盖率、为缺陷修复编写回归测试,或为新包搭建测试基础设施。需要提供待测 R 函数、预期行为与边界情况;可选提供测试夹具、示例数据以及目标覆盖率(默认 80%)。
主要能力包括:用 usethis::use_testthat(edition = 3) 搭建测试基础设施,用 usethis::use_test("function_name") 创建 test-<function_name>.R 测试文件;编写基础测试、边界情况测试(空输入、单值、零权重、极大值、非法输入等)、夹具与 helper.R、用 local_mocked_bindings() 模拟外部依赖、用 expect_snapshot()/expect_snapshot_file() 做快照测试,以及用 skip_on_cran()、skip_on_os()、skip_if_not() 等跳过条件保护特殊环境测试。
使用方式为按步骤执行:先初始化 testthat 3,再建测试文件,然后依次覆盖常规输出、NA 处理、输入校验、边界情况、夹具、模拟、快照与跳过条件,最后用 devtools::test() 运行全部测试、用 testthat::test_file() 运行单个文件,并用 covr::package_coverage() 与 covr::report() 检查覆盖率。可用 usethis::use_testthat、usethis::use_test、devtools::test、devtools::test_active_file、testthat::test_file、covr::package_coverage、covr::report 等命令。
限制与注意事项:每个 test_that() 块应相互独立,不依赖执行顺序;夹具路径应使用 testthat::test_path();浮点比较用 expect_equal() 而非 expect_identical();尽量通过公共 API 测试私有函数;快照测试对平台敏感,跨平台可用 variant 参数;涉及网络、数据库或长时间运行的测试须用 skip_on_cran()。验收标准为全部测试通过 devtools::test()、覆盖率达标、每个导出函数至少有一个测试、覆盖错误条件与边界值且不依赖外部状态。