ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Erlang测试完全指南:erlang.mk集成EUnit、Common Test、PropEr与Triq四大框架

Erlang测试完全指南:erlang.mk集成EUnit、Common Test、PropEr与Triq四大框架 Erlang测试完全指南erlang.mk集成EUnit、Common Test、PropEr与Triq四大框架【免费下载链接】erlang.mkA build tool for Erlang that just works.项目地址: https://gitcode.com/gh_mirrors/er/erlang.mk如果你正在为 Erlang 项目搭建测试体系erlang.mkA build tool for Erlang that just works是最佳选择。这个构建工具原生集成了EUnit、Common Test、PropEr、Triq 四大测试框架只需一条 Makefile 接入即可用make tests一键运行单元测试、功能测试与属性测试无需手写任何测试运行脚本。为什么选择 erlang.mk 做 Erlang 测试erlang.mk 是 Erlang 生态中最流行的构建工具它的测试能力有几个杀手级特性零配置发现自动扫描test/目录和源码中的测试函数无需注册四大框架统一入口EUnit、Common Test、PropEr、Triq 全部自动接入精准定位用t变量即可运行单个模块、单个用例甚至单个属性依赖自动管理测试专用依赖通过TEST_DEPS声明自动下载编译多应用支持apps/目录下的每个应用都能独立或批量跑测试快速安装 erlang.mk将 erlang.mk 克隆到你的项目根目录即可git clone https://gitcode.com/gh_mirrors/er/erlang.mk.git一分钟接入测试Makefile 只需两行在项目根目录创建Makefile内容仅需两行PROJECT my_project erlang.mk: $(warning erlang.mk is missing) git clone https://gitcode.com/gh_mirrors/er/erlang.mk.git erlang.mk include erlang.mk接着创建test/目录把测试文件放进去——erlang.mk 的测试核心逻辑位于 core/test.mk它会自动把test/目录编译为带调试信息的测试版本-DTEST1宏仅在测试时定义测试代码可安全地写进生产模块。框架一EUnit —— 单元测试首选EUnit 是 Erlang 官方单元测试框架erlang.mk 会在 plugins/eunit.mk 中自动完成测试发现与运行。如何编写 EUnit 测试所有以_test或_test_结尾的函数都会被识别为测试用例测试可写在src/的业务模块中用-ifdef(TEST).包裹随生产发布时自动剔除也可放在test/目录的独立模块中运行 EUnit 的三种姿势# 1. 运行全部 EUnit 测试 make eunit # 2. 运行指定模块的所有测试 make eunit tmy_module # 3. 运行指定模块中的单个用例 make eunit tmy_module:parse_test_ # 需要看详细输出时默认只报错 make eunit EUNIT_OPTSverbose 小技巧多应用仓库或依赖库也能直接定向测试例如make -C apps/my_app eunit tmy_module:hello_test。框架二Common Test —— 功能与集成测试Common Test 是 Erlang 官方功能测试框架erlang.mk 在 plugins/ct.mk 中自动发现测试套件并生成独立目标。Common Test 测试套件写法套件文件必须以_SUITE.erl结尾并放在test/目录由TEST_DIR变量控制默认test/。例如文件test/http_SUITE.erl对应的套件名就是http。Common Test 一键运行技巧erlang.mk 会为每个发现的套件自动生成ct-套件名目标这是它最优雅的设计之一# 运行所有套件 make ct # 只运行 http 套件 make ct-http # 运行 http 套件中 http_compress 组的所有用例 make ct-http thttp_compress # 运行组内某个具体用例 make ct-http thttp_compress:headers_dupe # 用例未分组时用 c 变量直接指定 make ct-http cheaders_dupe✅ 测试日志默认写入logs/目录CT_LOGS_DIR可修改HTML 报告便于浏览器查看CT_OPTS变量可传入任意 Common Test 选项比如配置自定义 CT 钩子。框架三 框架四PropEr 与 Triq —— 属性测试双雄PropEr 和 Triq 都是 QuickCheck 风格的属性测试框架你不再列举具体输入输出而是描述对任意输入都应成立的数学性质由框架生成海量随机数据来验证用极少的测试代码覆盖极多的边界情况。erlang.mk 分别在 plugins/proper.mk 和 plugins/triq.mk 中实现了对两者的自动发现与运行用法完全对称# 声明测试依赖以 PropEr 为例写在 Makefile 中 TEST_DEPS proper # 运行全部属性测试 make proper # 只运行指定模块的属性 make proper tfoo_tests # 只运行模块中单个属性函数 make proper tfoo_tests:bar # Triq 完全相同 make triq make triq tfoo_tests:bar PropEr 插件会自动扫描所有编译产物中以prop_开头的 0 元函数并逐一 quickcheckTriq 则直接对整个模块执行triq:check。两者均支持覆盖率导出生成proper.coverdata/triq.coverdata。终极命令make tests 一键跑完所有测试这是 erlang.mk 测试体系的高光时刻——四大框架的插件都把自己的目标挂到了tests上见各插件中tests:: eunit、tests:: ct、tests:: proper、tests:: triq的定义。因此你只需要# 一键运行全部测试自动跳过未声明的框架 make tests # 测试 静态检查dialyzer 等需加载对应插件 make check 如果你只声明了TEST_DEPS proper那么make tests只会跑 EUnit 和 PropEr完全不会报错——框架是用了才加载互不干扰。多应用场景仓库使用apps/组织多个应用时顶层make tests会递归跑遍所有应用也可以用-C精准打击某一个make -C apps/my_app tests四大框架选型对照表框架定位适用场景运行命令接入文件EUnit单元测试单个函数、模块逻辑验证make eunitplugins/eunit.mkCommon Test功能/集成测试多进程协作、网络、配置项验证make ctplugins/ct.mkPropEr属性测试解析器、编码器、纯函数性质验证make properplugins/proper.mkTriq属性测试同 PropErAPI 风格略有差异make triqplugins/triq.mk一句话建议日常开发用 EUnit 保底线上线前用 Common Test 保功能核心算法模块上 PropEr 或 Triq 保鲁棒性——三者组合就是工业级 Erlang 项目的标准测试栈。常用配置变量速查变量作用默认值TEST_DIR测试文件目录test/TEST_DEPS仅测试时引入的依赖空EUNIT_OPTSEUnit 运行选项如verbose空CT_OPTSCommon Test 选项钩子等空CT_SUITES手动指定要运行的套件自动发现CT_LOGS_DIRCT 日志输出目录logs/t精准定位模块 / 模块:用例 / 组:用例空小结erlang.mk 用约定优于配置的哲学把 Erlang 测试从繁琐的脚本时代带进了一个命令的时代写测试文件到test/执行make tests剩下的交给它。无论是新手的第一支测试还是资深团队的 CI 流水线这套 EUnit Common Test PropEr Triq 的组合都能稳定支撑。快去试试吧【免费下载链接】erlang.mkA build tool for Erlang that just works.项目地址: https://gitcode.com/gh_mirrors/er/erlang.mk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表