rebar3 eunit

Rebar3 has built in eunit and ct (common_test) test runners

Eunit

$ rebar3 eunit

如果定义了宏的:{d, TEST, true} and {d, EUNIT, true},
rebar3会编译所有项目模块,你可以使用-ifdef(TEST). or -ifdef(EUNIT)隐藏测试代码
如果存在test目录,它会自动编译里面所有代码。

最后为每个app调用eunit:test([{application, App}]
如果你想更改eunit:test/1的参数,可以修改rebar.conf文件的eunit_tests

限制测试:

% 指定apps
$ rebar3 eunit --application=some_app,some_other_app

% 指定modules
$ rebar3 eunit --module=a,b,c

% 指定test files
$ rebar3 eunit --file="test/my_tests.erl"

% 指定directories
$ rebar3 eunit --dir="test"

Common Test

$ rebar3 ct
% rebar3会查找所有app的test目录,并编译运行*_SUITE.erl源码

限制测试:

% 指定suites
$ rebar3 ct --suite=test/first_SUITE,test/second_SUITE

帮助:

$ rebar3 help ct

Code Coverage

说明:

1.设定{cover_enabled, true}
2.运行
  rebar3 eunit --cover
  or
  rebar3 ct --cover
3.说明
  1.生成cover data: .coverdata类型文件
  2.运行rebar3 cover

.coverdata文件:

eunit.coverdata
ct.coverdata

可使用–cover_export_name指定.coverdata文件名:

$ rebar3 ct --dir test/suites1 --cover --cover_export_name=suites1
===> Running Common Test suites...
...
$ rebar3 ct --dir test/suites2 --cover --cover_export_name=suites2
===> Running Common Test suites...
...
$ ls _build/test/cover
cover.log    suite1.coverdata    suite2.coverdata
$ rebar3 cover --verbose
===> Performing cover analysis...
  |----------------------------|------------|
  |                    module  |  coverage  |
  |----------------------------|------------|
  |                     ....   |       Y%   |
  |----------------------------|------------|
  |                     total  |       X%   |
  |----------------------------|------------|
  coverage calculated from:
    _build/test/cover/suites1.coverdata
    _build/test/cover/suites2.coverdata
  cover summary written to: _build/test/cover/index.html