我是新来Erlang的。它有两个测试框架: EUnit和通用测试。我对什么时候使用一个而不是另一个感到困惑。谁能给我解释一下EUnit相对于通用测试的优势是什么,反之亦然。似乎通用测试可以做EUnit能做的一切,甚至更多,我不确定我应该用EUnit做什么。谢谢!
发布于 2013-08-06 15:42:36
除了官方文档之外,Learn you some erlang ( erlang最好的在线资源之一)很好地解释了这两种方法:
正如帕斯卡所指出的,EUnit最适合用于白盒测试,更像是内部的逐个功能的单元测试,轻量级的集成测试。
通用测试做更繁重的工作:集成和系统测试,黑盒之类的东西。当然,它也更复杂,功能也更强大。
在此期间,您可以尝试Dialyzer,这是Erlang/OTP中的另一个集成测试工具,它可以很好地定位死代码或无法访问的代码、逻辑和类型错误(它是一个静态类型分析器)。同样,向您学习一些erlang提供了一个很好的介绍:Dialyzer。
哦,顺便说一句,如果您选择将EUnit测试放在单独的文件中(这是完全可能的),您将无法测试未导出的函数(这是预期的)。我们还期望Common Test不会测试未导出的函数:否则它就不是黑盒测试工具(可能是作弊工具)。
发布于 2013-08-03 21:11:00
Eunit非常简单,非常适合白盒级别的模块测试或库测试。它已集成到钢筋中。
通用测试更多地面向黑盒测试和应用程序以及应用测试系统。它很容易提供测试覆盖率。
编辑(在Andy评论之后):
您可以使用Common test进行单一白盒测试,也可以使用eunit进行一些使用fixture的应用程序测试,这是正确的。
然而,eUnit对于简单的单一测试非常方便:你编写一个函数myFun,在你的测试模块中添加一个测试函数myFun_test或一个测试生成器myFun_test_ (对于测试许多模式很有用,甚至一些测试在中间失败),仅此而已。你可以随心所欲地运行它(没有测试历史记录)。
通用测试要求您在all函数中或在组中列出每个测试用例。据我所知,它没有测试生成器,所以不太容易遍历每个函数的所有测试模式。这就是为什么我认为它不太适合单一的白盒测试。另一方面,init_per_testcase,init_per_group ..。在需要运行一些应用程序上下文时,在组织测试方面比eunit fixture灵活得多。通用测试还在日志目录中保留了所有测试的历史记录,这很好,但我建议限制运行次数以保持其有用。
编辑:
为了避免未导出函数的问题,对于eunit和公共测试,可以使用定义。例如,在rebar.config中(因为我对eunit测试使用单独的文件):
{eunit_compile_opts, [{d,'EUNIT_TEST',true}]}.
{erl_opts, [debug_info, warn_export_all]}.在模块中,如果有必要的话:
%% export all functions when used in eunit context
-ifdef(EUNIT_TEST).
-compile(export_all).
-endif.您可以验证它是否只修改eunit的编译代码
D:\git\helper>rebar clean eunit compile
==> helper (clean)
==> helper (eunit)
Compiled test/help_list_tests.erl
Compiled test/help_ets_tests.erl
Compiled test/help_num_tests.erl
Compiled src/help_ets.erl
Compiled src/help_list.erl
Compiled src/helper.erl
src/help_num.erl:6: Warning: export_all flag enabled - all functions will be exported
Compiled src/help_num.erl
Compiled src/help_code.erl
All 31 tests passed.
Cover analysis: d:/git/helper/.eunit/index.html
==> helper (compile)
Compiled src/help_ets.erl
Compiled src/help_list.erl
Compiled src/helper.erl
Compiled src/help_num.erl
Compiled src/help_code.erl发布于 2013-10-11 04:03:48
来自http://www.erlang.org/doc/apps/common_test/basics_chapter.html
通用测试也是白盒测试Erlang代码(例如模块测试)的一个非常有用的工具,因为测试程序可以直接调用导出的Erlang函数,并且实现基本测试套件和执行简单测试所需的开销非常小。例如,对于Erlang软件的黑盒测试,可以使用Erlang RPC以及标准的O&M接口。
https://stackoverflow.com/questions/18031247
复制相似问题