【问题标题】:More human-friendly tests messages with Erlang EUnit?使用 Erlang EUnit 更人性化的测试消息?
【发布时间】:2016-07-29 21:16:41
【问题描述】:

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

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

【问题讨论】:

    标签: erlang eunit


    【解决方案1】:

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

    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,它们也会在测试执行时打印出来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 2012-06-17
      • 2015-01-21
      • 2011-09-20
      • 2012-10-29
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多