`
DiaoCow
  • 浏览: 241791 次
  • 性别: 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然后跑一遍。。。

相关推荐

    年终工作总结汇报PPTqytp.pptx

    年终工作总结汇报PPTqytp.pptx

    setuptools-32.1.1-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于java的聊天系统的设计于实现.zip

    基于java的聊天系统的设计于实现

    罗兰贝格_xx事业部制建议书gltp.pptx

    罗兰贝格_xx事业部制建议书gltp.pptx

    setuptools-18.6-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于luatos的W801单片机载具开环控制程序.zip

    基于单片机的系统

    企业管理与人力资源管理咨询项目gltp.pptx

    企业管理与人力资源管理咨询项目gltp.pptx

    基于JSP民宿预订网站信息管理平台源码.zip

    这个是一个JSP民宿预订网站信息管理平台,管理员角色包含以下功能:管理员登录,用户管理,会员管理,民宿信息管理,新闻管理,留言管理等功能。用户角色包含以下功能:用户登录与注册,查看网站新闻,查看民宿信息,查看留言板,修改个人信息,提交订单,查看我的订单等功能。 本项目实现的最终作用是基于JSP民宿预订网站信息管理平台 分为2个角色 第1个角色为管理员角色,实现了如下功能: - 会员管理 - 新闻管理 - 民宿信息管理 - 用户管理 - 留言管理 - 管理员登录 第2个角色为用户角色,实现了如下功能: - 修改个人信息 - 提交订单 - 查看我的订单 - 查看民宿信息 - 查看留言板 - 查看网站新闻 - 用户登录与注册

    数字通信原理(第二版)课后答案-主编:周冬梅

    数字通信原理(第二版)课后答案

    setuptools-34.0.2.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    学生实验课程-纯c语言迷宫源码

    学生实验课程-纯c语言迷宫源码

    基于JSP网上二手交易商城源码.zip

    这个是一个JSP网上二手交易商城,管理员角色包含以下功能:管理员登录,用户管理,商品分类管理,商品管理,订单管理,留言管理,新闻公告管理等功能。用户角色包含以下功能:查看首页,查看商品,用户登录和注册,加入购物车,查看订单,留言等功能。

    setuptools-8.0.3-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    setuptools-42.0.0-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    什么是c语言文件读写操作代码以及学习c语言文件读写操作代码的意义

    c语言文件读写操作代码

    setuptools-38.0.0-py2.py3-none-any.whl

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    setuptools-34.3.3.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于springboot的就业信息管理系统

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg

    python学生管理系统的程序+源码.zip

    在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时,有两种方法,一种是输入1,另一种是按下键盘上的↑或↓方向键进行选择。这两种方法的结果是一样的,所以使用哪种方法都可以。

    redis学习课件.zip

    Redis(Remote Dictionary Server)是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。以下是一些学习Redis的基本步骤和要点: 了解Redis的基本概念和特性: Redis是一个基于内存的key-value存储系统,它支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等。 Redis的所有操作都是原子性的,这意味着Redis的命令在执行过程中不会被其他命令打断。 Redis支持主从复制,数据可以从主服务器向任意数量的从服务器上同步。 Redis支持持久化,可以将内存中的数据保存到磁盘中,以防数据丢失。 安装Redis: 在Linux系统上,你可以从Redis的官方网站下载源代码,然后编译并安装。 在Windows系统上,你可以下载Redis的Windows版本,并解压后运行

Global site tag (gtag.js) - Google Analytics