`
DiaoCow
  • 浏览: 242113 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Erlang 单元测试

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

我们先看一个例子(吐槽下Iteye的erlang代码高亮):


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

单元测试代码:


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

现在我们来运行单元测试(需要先编译)


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

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

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

如下图


现在我们执行编译:


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

现在我们在重新运行下单元测试:


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

为了更方便的创建/编译erlang工程项目,我自己写了两个简单的脚本:
1.erlang工程创建脚本


2.erlang工程编译脚本


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


我们看下脚本执行效果:
1.创建erlang项目


2.编译erlang项目(若编译正常,则自动进入erl shell)


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

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





  • 大小: 6.8 KB
  • 大小: 6.4 KB
  • 大小: 14.1 KB
  • 大小: 4.8 KB
  • 大小: 10.2 KB
  • 大小: 13.1 KB
  • 大小: 21.1 KB
  • 大小: 23.3 KB
  • 大小: 2.7 KB
  • 大小: 7.2 KB
  • 大小: 7.6 KB
  • 大小: 55.3 KB
分享到:
评论
4 楼 DiaoCow 2013-01-09  
standalone 写道
Thanks! 那么rebar是不是写OTP类型的程序用的,如果一般的erlang程序适用吗?

完全可以
3 楼 standalone 2013-01-09  
Thanks! 那么rebar是不是写OTP类型的程序用的,如果一般的erlang程序适用吗?
2 楼 DiaoCow 2013-01-08  
standalone 写道
很好,学习了!

有个问题,这样每次test都要开一个erlang的shell,怎么能够把test的自动运行放到makefile里面去了,比如

make test

就把所有的测试compile然后跑一遍。。。


感谢你的回复。
rebar中已经支持自动运行测试用例,我看到网上一篇帖子,希望对你有帮助 http://blog.csdn.net/dp0304/article/details/7088176
1 楼 standalone 2013-01-08  
很好,学习了!

有个问题,这样每次test都要开一个erlang的shell,怎么能够把test的自动运行放到makefile里面去了,比如

make test

就把所有的测试compile然后跑一遍。。。

相关推荐

    erlang eunit

    Erlang的单元测试文档,eunit.

    erlang-formula

    二郎 二郎 安装erlang语言 ... 安装erlang单元测试框架 erlang.manpages 安装 erlang 联机帮助页。 erlang.nox 安装不需要 X Window 系统的 erlang 应用程序。 erlang.hipe 安装 erlang HiPe 应用程序

    erlang版游戏场景aoi(基于四叉树)

    erlang版游戏场景aoi(基于四叉树),200行代码,可直接使用,有单元测试。

    Python之PyUnit单元测试实例

    本文实例讲述了Python之PyUnit单元测试,与erlang eunit单元测试很像,分享给大家供大家参考。具体方法如下: 1.widget.py文件如下: 复制代码 代码如下:#!/usr/bin/python # Filename:widget.py class Widget: def ...

    getopt:Erlang模块使用GNU getopt语法解析命令行参数

    要运行单元测试,请运行rebar3 eunit 。 要构建(非常)有限的文档,请运行rebar edoc 。 要在项目中使用getopt,您可以通过以下方式将其作为依赖项添加到rebar.config文件中: { deps , [ { getopt , " 1.0.2 " } ...

    cover_tool:包装erlang盖模块

    这是填没有单元测试,但是又想知道大多数情况的代码覆盖情况的坑。 How 配置下下面的参数 {generate_dir, "/tmp/cover_generate_dir"}, {analyze_app, server}, {analyze_interval, 1200} 然后在启动App前,启动...

    bstr:Erlang库将二进制文件用作字符串

    bstr Erlang库将二进制文件用作字符串。 要求 在以下OTP版本中进行了测试: 17.1 17.0 R16B03-1 R16B03 R16B02 ...请检查test/bstr_test.erl的单元测试以查看可用功能列表以及如何使用它们。

    cuter:用于Erlang功能编程语言的Conolic测试工具

    这是CutEr的源代码树,CutEr是Erlang的一个condicular单元测试工具。 注意:此工具仍在大量开发中 执照 Aggelos Giantsios,Nikolaos Papaspyrou和Kostis Sagonas版权所有2014-2021。 该程序在GPL版本3或更高版本...

    redo:流水线的Erlang Redis客户端

    单元测试 $ ./rebar eunit suite=redo 本地阅读基准 $ erl -pa ebin 1> bench:sync(1000). 91ms 10989 req/sec 2> bench:async(1000, 100). 38ms 26315 req/sec 并发测试 $ erl -pa ebin 1> redo_concurrency_test:...

    mgee:2010年写的一个erlang游戏服务端demo

    mgee 2010年写的一个erlang游戏服务端demo 说明 代码未作美化或者修改,仅仅作为一个记录,代码质量不做任何保证 部分文件可能会涉及到开源版权问题,请自行处理[当年无知,改了开源文件的...单元测试 编译运行 Mac/Lin

    Erlang Ant Library-开源

    当前,Erlang Ant库包含一项用于编译Erlang源文件的任务。 在不久的将来,将添加任务来由EDoc生成Erlang程序的文档。 在以后的一些发行版中,计划了一项任务,以运行EUnit进行单元测试。

    embjson:将 JSON 结构嵌入到 Erlang 代码中

    单元测试中的使用示例 使用 yaws json2 结构: -compile({parse_transform, embjson}). -embjson([{callback, embjson_yaws_json2}, {function, '@json'}]). 可选属性embjson配置解析转换: callback :回调模块...

    gossiperl:Erlang 中的 Gossip 中间件

    单元测试 rebar clean get-deps compile && rebar eunit skip_deps=true 作者 Radoslaw Gruchalski 执照 麻省理工学院许可证 (MIT) 版权所有 (c) 2014 Radoslaw Gruchalski radek@gruchalski.com 特

    local-cluster:轻松为 Elixir 创建本地集群以帮助进行单元测试

    整个库是围绕 Erlang API 进行简单的填充,用于处理分布式节点,由于其中一些不明显,并且由于我需要将此代码用于多个项目,因此我将其扩展为一个较小的项目。安装要为您的项目安装它,您可以直接从 Hex 中提取它。...

    test.check:快速检查Clojure

    test.check的核心思想是,您不必为单元测试枚举预期的输入和输出,而是编写关于函数的属性,这些属性对于所有输入都应为true。 这使您可以编写简洁而强大的测试。 发布信息基本文件有用的图书馆示例(其中一些可能...

    sqerl:松鼠市场贸易处理器

    介绍 Sqerl /松鼠市场交易处理器。 通过POST将以JSON编码的传入货币交易信息接受到交易控制器,并在解码和验证后将其记录在配置MySQL数据库中。 实行两层限速; 所有请求都可以基于IP地址进行速率限制...运行单元测试:

    迷宫:用PhoenixLiveView制作的迷宫发生器

    迷宫 迷宫发生器。 部署在 。 建立 要启动Phoenix服务器: ...单元测试需要运行在localhost:8888 验证器服务器(请参阅 )。 从以下内容开始: docker run -it --rm -p 8888:8888 validator/validator:latest

    vim_snake:具有Vim样式绑定的经典多人蛇游戏

    带有Vim风格绑定的经典多人蛇游戏 ... 现场演示可以在或上找到 预习 要求 Erlang 18或更高版本 Node.js v8 PostgreSQL 启动并运行 安装套件 mix deps.get cd assets && npm i && cd .. ...添加单元测试

    storrent:玩具 scalaakka Bittorrent 客户端。 学习scala时写的,现在无人维护

    一个例外是为了使单元测试更容易而拆分的参与者。 在参与者层次结构的每个级别上都有一个简单的 1:1 或 1:many 关系。 整个程序只有一个 Storrent 对象,它为每个 Torrent 文件生成一个 Torrent actor。 每个 ...

    riak_repl:Riak DC复制

    “ xyz就是这样工作的” 单元测试riak_tests EQC +脉冲测试在大规模和重负荷下进行测试波士顿集群或AWS 公开文件注意事项对于文档团队BEAM发行流程git标记将要发布的特定提交运行所有eunit测试,EQC测试,并将输出...

Global site tag (gtag.js) - Google Analytics