Erlang 单元测试

今天学习了下Erlang单元测试,发现非常有用,现在做个总结:

我们先看一个例子(吐槽下Iteye的erlang代码高亮):
Erlang 单元测试_第1张图片

这个module负责计算1到N的和,现在我们如何确认这个module功能的正确性呢?
方法1:你可以再shell终端下,不断输入测试参数,然后验证程序输出结果,这种方法比较简单,而且可能也是每个人的首选方式,但是当我们日后不断对module进行修改,为了能够保证功能的正确性,我们又必须把以前的测试数据再输入一遍,所以这种方式不可持续发展;
方法2:编写单元测试,“一劳永逸”(下次改完module代码,我们只要跑下单元测试即可)

单元测试代码:
Erlang 单元测试_第2张图片

需要注意的几点:
1.单元测试的module名 = 需要测试的module名 +  "_tests"后缀(或者_test_后缀),譬如这里我需要测试diaocow.erl,那么我的单元测试代码就是diaocow_tests.erl;
2.测试方法名需要以"_test"为后缀;
3.单元测试需要引入头文件:-include_lib("eunit/include/eunit.hrl")

现在我们来运行单元测试(需要先编译)
Erlang 单元测试_第3张图片

其中:
1.erlc 是编译命令,erlc *.erl表示编译当前目录下所有erlang源文件;
2.eunit:test(Module) 执行某个module的单元测试

到目前似乎一切都OK了,但是你有没有发现代码目录实在是太乱了,源文件,单元测试文件,字节码文件都放在一个目录下,现在我们就按照业界标准来把它们分下类:

src 存放程序源代码文件
ebin 存放编译后的字节码文件
test 存放单元测试源代码文件

如下图
Erlang 单元测试_第4张图片

现在我们执行编译:
Erlang 单元测试_第5张图片

-o 参数用来指定编译后的字节码存放目录(这里是ebin)

现在我们在重新运行下单元测试:
Erlang 单元测试_第6张图片

-pa参数用来指定执行文件(.beam)目录

为了更方便的创建/编译erlang工程项目,我自己写了两个简单的脚本:
1.erlang工程创建脚本
Erlang 单元测试_第7张图片

2.erlang工程编译脚本
Erlang 单元测试_第8张图片

为了能够更方便的使用这两个脚本,我们在.bashrc文件中配置alias(添加快捷键)


我们看下脚本执行效果:
1.创建erlang项目
Erlang 单元测试_第9张图片

2.编译erlang项目(若编译正常,则自动进入erl shell)
Erlang 单元测试_第10张图片

其实上面脚本所提供的功能,rebar都提供了,而且更加强大完善(搜索 erlang rebar)

关于erlang的单元测试,我就说到这里,更详细的官方文档,请看这里: http://www.erlang.org/doc/apps/eunit/chapter.html#id61195





你可能感兴趣的:(erlang,单元测试)