Erlang 从零 · 第 17 课(展开目录)
01 · 先打开 erl02 · 先认常见 term03 · 分清两种文字04 · 变量只接一次05 · 拆开一列,再筛一次06 · 把文字安全变成整数07 · 用 case 选一条路08 · 让函数继续走09 · 把代码放进模块10 · 条件必须说真话11 · 一层一层取数据12 · 文字先说清编码13 · 让函数子句排好队14 · 带着累加器往前走15 · 先看值,再选路16 · 给模块立规矩17 · 让 rebar3 管项目18 · 让结果有固定形状19 · 把磁盘当成会失败的邻居20 · 把函数交给 list21 · record 留在院里22 · 先写模块之间的约定23 · 把 term 形状写出来24 · 小测试与整段路25 · 把应用磨成命令26 · 先把小项目圈住27 · 把真实文件洗干净28 · 公开入口越少越稳29 · 把约定留在源码旁30 · 打包,也留下线索31 · 按最初任务交卷
ERLANG · 基础 · LESSON 1745 分钟
让 rebar3 管项目
创建 Erlang 应用,写第一个模块,再用 EUnit 保存例子。
01 · 先看完整例子
在项目模块中写第一个测试
先运行 rebar3 new app trail_counter,放入 src/trail_counter.erl,再执行 rebar3 eunit。
Erlang
-module(trail_counter).
-export([text_length/1]).
-include_lib("eunit/include/eunit.hrl").
text_length(Text) ->
erlang:length(unicode:characters_to_list(Text)).
%% _test 结尾会被 EUnit 自动发现
unicode_length_test() ->
?assertEqual(2, text_length(<<"长安"/utf8>>)).先对照结果
- 测试通过时 EUnit 显示 1 tests passed。
02 · 回头拆代码
从第一行往下读
- 公开函数把 UTF-8 binary 转成码点 list 后计数。
- EUnit 头文件提供断言宏。
- rebar3 负责编译测试代码并运行用例。
03 · 认清新符号
符号不是暗号
rebar3 new app name创建 OTP 应用骨架。
-include_lib("eunit/include/eunit.hrl").引入 EUnit 宏。
?assertEqual(Expected, Actual)比较期待值与实际值。
04 · 代码里的概念
把名字和意思对上
rebar3
Erlang/OTP 项目的构建与依赖工具。
EUnit
随 Erlang/OTP 提供的轻量单元测试框架。
05 · 再说清楚
这些写法为什么有用
rebar3 是常用 Erlang 构建工具。它创建项目、编译代码、管理依赖并运行测试。
应用源码通常放 src/,配置写在 rebar.config。EUnit 适合短小单元测试。
测试函数名以 _test 结尾,或使用 EUnit 生成器。?assertEqual 写出期望和实际结果。
06 · 自己改一次
合上答案,动手
再加一个空 binary 测试。
练习起点
empty_text_test() ->
?assertEqual(____, text_length(____)).目标结果: 期待 text_length(<<>>) 得到 0。
卡住了,再看提示
两个空分别填 0 与 <<>>。
运行过以后,再看一种答案
一种答案
empty_text_test() ->
%% 空 binary 没有字符
?assertEqual(0, text_length(<<>>)).想一想:rebar3 是 Erlang 语言本身吗?
不是。它是项目构建工具;源码仍由 Erlang 编译器编译并在 BEAM 上运行。
带走
记住三句
- 1
rebar3 管理项目构建流程。
- 2
EUnit 保存可重复检查的例子。
- 3
源码、配置与测试各有固定位置。
本课结束代码也跑过一次,就把这一课收好。