我是Erlang的新手.它有2个测试框架:EUnit和Common Test.我很困惑何时使用一个而不是另一个.有人可以向我解释一下EUnit相对于Common Test的优点是什么,反之亦然.似乎Common Test可以完成EUnit可以做的所有事情以及更多,不确定我应该使用EUnit.谢谢!
Ber*_*mus 13
了解一些erlang(除了官方文档之外,erlang最好的在线资源之一)很好地解释了这两种方法:
正如Pascal所指出的,EUnit最适用于白盒测试,更像是内部功能单元测试,轻集成测试.
Common Test提供更繁重的工作:集成和系统测试,黑盒子的东西.当然,它也更复杂,也更强大.
当你在它的时候,你可能会尝试使用Erly/OTP中的另一个集成测试工具Dialyzer,它非常适合查找死机或无法访问的代码,逻辑和类型错误(它是一个静态类型分析器).再次,了解一些erlang提供了一个很好的介绍:Dialyzer.
哦,顺便说一句,如果您选择将EUnit测试放在单独的文件中(这是完全可能的),您将无法测试未导出的函数(这是预期的).还期望Common Test不测试未导出的功能:否则它不会是黑盒测试工具(可能是作弊的).
Eunit非常简单,非常适合在白盒级别进行模块测试或库测试.它被整合到螺纹钢中.
Common Test更适用于黑盒测试和应用程序测试系统.它非常容易提供测试覆盖率.
编辑(在安迪评论之后):
你可以使用Common测试进行单一的白盒测试,并且你可以使用fix来利用eunit进行某些应用程序测试.
然而,对于简单的单一测试,eUnit非常方便:你编写了一个函数myFun,你在测试模块中添加了一个测试函数myFun_test或一个测试生成器myFun_test_(用于测试许多模式甚至是中间的一些测试失败),就是这样.您可以根据需要随时运行它(没有测试历史记录).
常用测试要求您在all函数或组中列出每个测试用例.据我所知,它没有测试生成器,因此不太容易通过每个函数的所有测试模式.这就是为什么我认为它不太适合单一的白盒测试.另一方面,init_per_testcase,init_per_group ...比eunit fixtures更灵活,以便在需要运行某些应用程序上下文时组织测试.Common Test还保留了在日志目录中完成的所有测试的历史记录,这很好,但我建议限制运行次数以保持其有用.
编辑:
为了避免未导出函数的问题,对于eunit和common测试,可以使用define.例如在rebar.config中(因为我使用单独的文件进行eunit测试):
{eunit_compile_opts, [{d,'EUNIT_TEST',true}]}.
{erl_opts, [debug_info, warn_export_all]}.
Run Code Online (Sandbox Code Playgroud)
在一个模块中,如果有必要:
%% export all functions when used in eunit context
-ifdef(EUNIT_TEST).
-compile(export_all).
-endif.
Run Code Online (Sandbox Code Playgroud)
您可以验证它是否仅修改了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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3200 次 |
| 最近记录: |