1

我习惯于 JavaScript 测试,尤其是它的 BDD 框架和库,如Chai,我可以用人性化的方式描述测试并用字符串命名测试,例如“UserProfile -> Update First Name”,然后将这些消息视为输出运行测试。

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

4

1 回答 1

3

是的。要向测试添加描述,测试需要是“测试对象”而不是普通测试。例如,更改此测试:

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

对此:

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

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

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

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

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

foo_test_() ->
    {"Ensure that foo works",
     ?_test(
       begin
         run_foo(),
         ensure_foo_works()
       end)}.

check_foo_test_() ->
    {"Check that foo is ok", ?_assertEqual(ok, foo())}.

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

于 2016-07-29T13:16:41.363 回答