使用Erlang EUnit进行更人性化的测试消息?

时间:2016-07-29 12:55:45

标签: erlang eunit

我习惯于JavaScript测试,特别是它的BDD框架和像Chai这样的库,我可以用人性化的方式描述测试,并用字符串命名测试,例如" UserProfile - >更新名字",然后在运行测试时将这些消息视为输出。

是否有可能以更自然的方式编写Erlang测试,或者至少将描述集成到测试运行过程中,而不仅仅是将它们作为注释,而是看到失败的测试名称?

1 个答案:

答案 0 :(得分:3)

是。要向测试添加描述,测试需要是"测试对象"而不是简单的测试。例如,更改此测试:

foo_test() ->
    run_foo(),
    ensure_foo_works().

到此:

foo_test_() ->
    ?_test(
      begin
        run_foo(),
        ensure_foo_works()
      end).

也就是说,函数的名称应该以{{1​​}}结尾,并且测试的主体应该包含在_test_宏中。还有其他这样的"包装宏"从下划线开始;例如,一个简单的断言可以像这样重写:

?_test

一旦你有一个"测试对象",你可以将它包装在一个元组中,其中第一个元素是一个字符串:

%% before
check_foo_test() ->
    ?assertEqual(ok, foo()).

%% after
check_foo_test_() ->
    ?_assertEqual(ok, foo()).

测试失败时将打印这些描述。如果以详细模式运行eunit,它们也会在测试执行时打印出来。