ソースを参照

Add random_suite_order option to eunit command

Option takes either 'true' or a numeric seed value. If true is passed, a
random seed is generated and used. The numeric seed value is for
repeatability.

The idea here is to root out test suites that are order dependant, or
that fail in the presence of certain orderings.
pull/3/head
Andrew Thompson 11年前
コミット
03da5e0be0
1個のファイルの変更28行の追加1行の削除
  1. +28
    -1
      src/rebar_eunit.erl

+ 28
- 1
src/rebar_eunit.erl ファイルの表示

@ -150,7 +150,7 @@ run_eunit(Config, CodePath, SrcErls) ->
AllBeamFiles),
OtherBeamFiles = TestBeamFiles --
[filename:rootname(N) ++ "_tests.beam" || N <- AllBeamFiles],
ModuleBeamFiles = BeamFiles ++ OtherBeamFiles,
ModuleBeamFiles = randomize_suites(Config, BeamFiles ++ OtherBeamFiles),
%% Get modules to be run in eunit
AllModules = [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- AllBeamFiles],
@ -233,6 +233,33 @@ get_suites(Config) ->
Suites
end.
%%
%% == randomize suites ==
%%
randomize_suites(Config, Modules) ->
case rebar_config:get_global(Config, random_suite_order, undefined) of
undefined ->
Modules;
"true" ->
Seed = crypto:rand_uniform(1, 65535),
randomize_suites1(Modules, Seed);
String ->
try list_to_integer(String) of
Seed ->
randomize_suites1(Modules, Seed)
catch
error:badarg ->
?ERROR("Bad random seed provided: ~p~n", [String]),
?FAIL
end
end.
randomize_suites1(Modules, Seed) ->
random:seed(35, Seed, 1337),
?CONSOLE("Randomizing suite order with seed ~b~n", [Seed]),
[X||{_,X} <- lists:sort([{random:uniform(), M} || M <- Modules])].
%%
%% == get matching tests ==
%%

読み込み中…
キャンセル
保存