【问题标题】:how to use rebar to create an erlang module with an eunit test?如何使用 rebar 创建带有 eunit 测试的 erlang 模块?
【发布时间】:2015-01-21 22:15:08
【问题描述】:

我的目标很简单;在学习 Erlang 时,我想使用 rebar 创建一个带有 eunit 测试的基本模块:

我尝试了以下方法:

mkdir erlangscratch
cd erlangscratch
rebar create template=simplemod modid=erlangscratch

将“test/erlangscratch_tests.erl”编辑为如下所示:

-module(erlangscratch_tests).
-include_lib("eunit/include/eunit.hrl").

% This should fail
basic_test_() ->
    ?assert(1 =:= 2).

执行测试:

snowch@tp:~/erlangscratch$ rebar co eu
==> erlangscratch (compile)
==> erlangscratch (eunit)

测试没有执行,但代码似乎也没有编译。

这是我文件夹的内容:

snowch@tp:~/erlangscratch$ tree .
.
├── src
│   └── erlangscratch.erl
└── test
    └── erlangscratch_tests.erl

2 directories, 2 files

问题:我错过了哪些步骤?


更新:

根据接受的答案,basic_test_ 函数需要重命名,并且缺少“src/erlangscratch.app.src”,因此我使用以下内容创建了它:

{application, erlangscratch,
 [
  {description, "An Erlang erlangscratch library"},
  {vsn, "1"},
  {modules, [
             erlangscratch
            ]},
  {registered, []},
  {applications, [
                  kernel,
                  stdlib
                 ]},
  {env, []}
 ]}.

【问题讨论】:

    标签: erlang rebar eunit


    【解决方案1】:

    您正在与test generators 混合测试。

    简而言之,第二个应该返回有趣的或有趣的列表。您可以通过测试名称末尾的 _ 以及 _ 和宏的开头来区分两者。

    简单的解决方案是使用任一

    basic_test() ->
        ?assert(1 =:= 2).
    

    basic_test_() ->
        ?_assert(1 =:= 2).
    

    取决于您的需求,以及您更了解的内容。


    编辑共享文件夹结构后

    rebar 似乎没有将您的项目识别为OTP application。您可能只是缺少简单的 .app.src 文件。比如:

    {application, myapp,
     [
      {description, ""},
      {vsn, "1"},
      {registered, []},
      {applications, [
                      kernel,
                      stdlib
                     ]},
      {env, []}
     ]}.
    

    由于 rebar 能够为您生成一个,您要么只需调用 rebar create-app 或扩展现有模板之一。

    【讨论】:

    • 感谢您的回答 - 不幸的是,在从 basic_test_() 中删除 _ 后,运行 rebar co eu 仍然会产生相同的输出。我还提供了对我的问题的更新,以显示我的工作文件夹的内容。
    • 使用simplelib rebar 模板而不是simplemod,因为后者不会创建 .app.src 文件,并且没有该 rebar 将无法编译任何内容。改为运行 rebar create template=simplelib libid=erlangscratch,假设您使用的是 basic_test 而不是之前建议的 basic_test_,它将按您的预期运行。
    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 2012-12-28
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 2017-03-05
    • 2013-01-03
    • 2012-05-05
    相关资源
    最近更新 更多