【问题标题】:How do I export all functions for common test only?如何导出所有功能仅用于普通测试?
【发布时间】:2016-03-16 07:06:18
【问题描述】:

我一直在尝试导出 erlang 模块中的所有函数,以便在通用测试套件中使用,而不是在 eunit 模块中使用。到目前为止,它还没有为我工作。我正在使用 rebar 来运行 SUITE,我遇到了这个问题 (http://lists.basho.com/pipermail/rebar_lists.basho.com/2011-October/001141.html),这基本上正是我想要做的,但该方法对我不起作用。

我还在 rebar.config 中添加了{plugins, [rebar_ct]}.,但没有任何区别。当我正常导出函数时,我应该指出我所有的测试都通过了,但我想避免这种情况。 任何帮助都会非常感谢。

【问题讨论】:

    标签: erlang rebar common-test


    【解决方案1】:

    如果您将其添加到模块中,编译器将导致模块中的所有函数被导出:

    -compile(export_all).
    

    或者你可以根据定义来做,比如:

    -ifdef(EXPORTALL).
    -compile(export_all).
    -endif.
    

    只有在钢筋配置 erl_opts 设置中有 {d, 'EXPORTALL', true} 时,才会导出所有内容,例如类似:

    {erl_opts, [
        {d, 'EXPORTALL', true}
        ]}.
    

    如果这不起作用,请确保您的钢筋配置中没有两次 erl_opts

    【讨论】:

    • 谢谢,当我这样做时它确实有效,但我想避免导出所有内容,因为它是不必要且昂贵的。我只想在测试套件调用它们时将它们导出。使用像 eunit test 这样的方法只导出如下。 -ifdef(EUNIT).-compile(export_all).-endif.
    • TEST 是为 eunit 定义的,但我不知道它是否是为 ct 定义的。
    • 它不是为ct定义的,所以下一步是在配置中用erl_opts中的{d, 'TEST', true}定义它,但由于我不知道的原因,它不起作用。
    • 这很奇怪,{d, 'TEST', true} 真的应该工作,对我有用,而且我唯一一次因为没有定义定义而省去撕头发是当我有两次 erl_opts 时。如果你这样做rebar eunit ct 会起作用吗?
    • 不幸的是,没有运气,我也只定义了一次 erl_opts。
    【解决方案2】:

    使用 rebar3,您可以在配置文件中定义额外的编译选项用于通用测试:

    {ct_compile_opts, []}.
    

    您可以添加 export_all ,仅用于普通测试。不确定是否存在钢筋。

    【讨论】:

    • 在尝试添加后,不幸的是它似乎不存在于钢筋中。不过谢谢
    • 考虑rebar3,它大多是向后兼容的并且有很多改进。
    猜你喜欢
    • 2013-03-04
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多