makefile - 在 Common Test 测试运行期间,更大的调用失败

标签 makefile erlang common-test lager parse-transform

我决定在我的 Erlang 项目中设置 lager。我使用的是erlang.mk,所以我添加了

ERLC_OPTS = +'{parse_transform, lager_transform}' 

到我的Makefile。我可以运行make all并编译模块,没有错误。我还可以启动erl控制台并使用 lager 运行包含模块的应用程序。在控制台 session 期间不会生成任何错误,并且会记录更多消息。似乎一切都很好(这是我第一次使用啤酒)。但是,当我运行 Common Test 时,较大的调用失败:

10:11:17.174 [error] CRASH REPORT Process <0.238.0> with 2 neighbours exited with reason: call to undefined function lager:info("Params: ~p", [[]]) in gen_server:init_it/6 line 328

由于我正在测试的模块似乎已正确编译,因此我认为这是较大模块不存在的问题。但是,如果我添加这个:

erlang:display(lager:module_info()),

在第一个 lager 调用之上,它成功了,打印了 lager 的模块信息。我假设我正在进行的日志记录调用正在利用一些解析转换魔法来工作,但这在我的公共(public)测试运行期间不存在。

非常感谢任何建议!

最佳答案

原来我的 Makefile 中有一个拼写错误,但在这个过程中我学到了很多关于 erlang.mk 的知识。 erlang.mk 正在寻找具有不同名称的变量。

我最初在我的 Makefile 中是这样的:

ERLC_OPTS = +'{parse_transform, lager_transform}'

但是 erlang.mk 在测试模块之前不使用 ERLC_OPTS 来编译模块。它总是在通用测试套件之前重新编译。为了让模块使用解析转换进行编译以进行测试,我需要这样做:

# Compile flags
ERLC_COMPILE_OPTS= +'{parse_transform, lager_transform}'

# Use the same settings for compiling releases as well as for testing
ERLC_OPTS= $(ERLC_COMPILE_OPTS)
TEST_ERLC_OPTS= $(ERLC_COMPILE_OPTS)

这可确保在测试期间使用完全相同的设置编译应用程序源代码。

关于makefile - 在 Common Test 测试运行期间,更大的调用失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25530298/

相关文章:

c - 如何修复在 Dev C 和 Netbeans 中有效但在 Eclipse 中无效的 makefile?

erlang - 来自测试模块的 EUnit 输出调试信息

erlang - 常见测试中如何测试错误处理?

erlang - 使用普通测试基于 cowboy 测试 Erlang 应用程序

android - 将跨平台库链接到 native Android 应用程序

c++ - 嵌入 luajit undefined reference

android-ndk - NDK找不到应用程序目录

erlang - 二进制位的参数匹配

http - 如何在 Erlang Web 服务器中处理非常大的文件上传?

erlang - 原因: undef while running common tests in erl console [Erlang]