`
DiaoCow
  • 浏览: 244177 次
  • 性别: 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编程语言中的单元测试框架——EUnit,为开发者提供了详尽的指导与实践建议。 ### Erlang与EUnit Erlang是一种通用的、并发的、容错的编程语言,由...

    erlang 21.3

    4. **测试**: 可选地,可以运行`make tests`来执行单元测试,确保编译无误。 5. **安装**: 最后,用`sudo make install`将编译好的Erlang二进制文件安装到系统路径中。 在实际应用中,Erlang 21.3可能会带来以下...

    erlang test 生成 dets

    例如,使用`etap`或`eunit`这样的单元测试框架来编写测试用例,确保在多线程环境下的正确性和一致性。此外,还要考虑如何有效地关闭和清理资源,避免内存泄漏。 总之,Erlang的DETs提供了一种简单而高效的方式来...

    erlang-java聊天

    在开发过程中,对Erlang和Java代码进行充分的单元测试和集成测试至关重要。可以使用Erlang的Test Server(Tsung)和Java的JUnit等工具进行测试。同时,日志记录和调试工具可以帮助识别和解决问题。 总结,"erlang-...

    erlang-formula

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

    erlang 中文基础教程

    这种即时反馈的特性使得Erlang Shell成为学习和测试Erlang代码的理想场所。 更复杂的数学运算也能轻松处理,比如`(42+77)*66/3.`,Erlang Shell能够正确解析并执行加、减、乘、除等运算,返回结果`2618.00`。这展示...

    erlang lib of iconv

    2. **测试**:编写单元测试来验证编码转换的正确性,确保在不同编码之间转换时不会丢失数据。 3. **错误处理**:在应用程序中适当地处理可能出现的错误,如无法打开的编码会话或失败的转换。 4. **日志和调试**:...

    erlang 深度分析

    - **单元测试**: 利用`eunit`框架编写单元测试,确保代码质量。 - **代码规范**: 遵循社区约定的代码风格和命名规则,提高代码可读性。 #### 4. 工具介绍 - **调试工具**: - `debugger`: 提供了断点、单步执行等...

    Erlang资料大全

    Erlang是基于Actor模型的,每个进程(process)都是一个独立的执行单元,它们之间通过消息传递进行通信。这使得Erlang在处理并发和分布式系统时表现出色,因为进程间的隔离可以避免共享状态引发的问题。 Erlang的...

    erlang实战IP查询服务

    - 使用Erlang自带的测试工具进行单元测试(eunit)和集成测试(common_test)。 5. **部署上线**: - 打包项目为Erlang release版本。 - 部署至生产环境。 #### 六、项目特色 - **高效性**: Erlang语言本身具有高度...

    erlang程序设计

    模块是Erlang代码的逻辑单元,可以包含常量、类型定义、记录和函数。 4. 错误处理和容错性:Erlang提倡“let it crash”哲学,即当遇到错误时,进程应尽快崩溃,而不是尝试修复。系统会自动重启失败的进程,确保...

    一种傻纸牌游戏的Erlang实现

    - **Eunit测试框架**:Erlang有内置的单元测试框架Eunit,开发者可能为游戏编写测试用例以确保其正确性。 以上是根据给定的标题和文件名推断出的一些关键知识点。实际的实现细节、代码结构和游戏玩法将取决于博文...

    Erlang程序设计,包含完整目录和全套源码

    5. **模块和函数**:Erlang的模块化设计有助于组织代码,函数是代码的基本执行单元。 6. **错误处理和监控**:Erlang提供了丰富的错误处理机制,如异常处理和过程监视,以及一套完整的监督和恢复机制。 7. **...

    Erlang程序设计第2版附书代码

    附书代码可能包含单元测试和集成测试的例子。 通过阅读和实践这些附书代码,你可以更好地理解和掌握Erlang语言的核心概念和技术,提升你的Erlang编程能力。在实践中不断探索,你会发现Erlang是一个强大的工具,特别...

    Erlang 中的Module级别热部署

    在Erlang中,模块是代码的基本单元,包含函数定义和其他声明。当一个模块被加载到Erlang虚拟机(VM)时,它的代码会被编译并驻留在内存中。热部署就是指在不重启VM或应用程序的情况下,更新这些驻留在内存中的模块...

    erlang 入门练习

    在Erlang中,模块(module)是代码组织的基本单元,每个模块可以包含多个函数(function)。 Erlang的语法特点是简洁明了,函数定义通常以`-module(ModuleName).`开始,接着是函数声明`-export([FunctionName/Arity...

    erlang程序设计(第二版)随书源码

    10. **测试和调试**:Erlang提供了`eunit`测试框架和`observer`工具来帮助开发者进行单元测试和系统监控。 通过深入研究《Erlang程序设计(第二版)》的随书源码,你可以逐步掌握这些关键知识点,并提升在实际项目...

Global site tag (gtag.js) - Google Analytics