问题标签 [eunit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
67 浏览

erlang - 关于在 /priv 中使用不同数据进行测试和生产的最佳实践?

我正在用 EUnit 编写测试,一些被测单元需要通过file:consult/1读取数据文件。我的测试对/priv中可用的数据进行了假设,但生产中的数据会有所不同。实现这一目标的最佳方法是什么?

我是 Erlang 的新手,我想到了一些让我觉得有点难看的解决方案。例如,

  • 将这两个文件放在/priv中并使用宏(例如,“-ifdef(EUNIT)”)来确定将哪个文件传递给file:consult/1。这对我来说似乎太脆弱/容易出错。
  • 让 Rebar 将正确的文件复制到/priv

如果我试图做一些根本错误的事情,请随时指出。情况可能就是这样。

有一个更好的方法吗?

0 投票
2 回答
523 浏览

erlang - 如何使用 eunit 测试 gen_server 内部状态

调用回调函数后是否可以检查 gen_server 的内部状态?我宁愿不在这里更改我的服务器的 API。

0 投票
3 回答
718 浏览

erlang - 如何在所有 eunit 案例之前启动应用程序

我的 Erlang 项目由 rebar 管理,它分为不同的模块。

并且对于每个模块*_tests.erl,使用 Eunit Fixtures来设置环境。例如,

Makefile 是:

这里我遇到了一个问题,因为我在 test/ 中有很多测试模块,每个测试模块都会启动和停止整个执行流程的应用程序。有时启动应用程序会失败,提示找不到 app.config 配置文件,不知道为什么。

所以我认为有没有办法在所有测试模块之前启动应用程序?

0 投票
1 回答
844 浏览

erlang - 如何使用 rebar 创建带有 eunit 测试的 erlang 模块?

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

我尝试了以下方法:

编辑 'test/erlangscratch_tests.erl' 看起来像这样:

执行测试:

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

这是我的文件夹的内容:

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


更新:

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

0 投票
2 回答
348 浏览

erlang - 在 eunit 测试夹具中添加设置和拆卸方法的首选方法是什么?

所以我想添加一个在所有其他测试之前执行的方法,以及在所有测试完成后执行的另一个方法,例如:

我知道我可以通过明确说明所有测试在单个测试中运行来“手动”执行此操作:

我希望有一种更好的方法来激活它,这样我就可以编写测试方法而无需将它们显式添加到此列表中。似乎应该对此有更好的支持?

0 投票
1 回答
425 浏览

intellij-idea - eunit 测试套件被取消错误

我一直在尝试使用 IntellijIdea 进行 erlang 开发。我使用钢筋从现有的酸创建了一个项目。但是当我尝试运行测试用例时,出现以下错误。这是我在控制台上看到的

我怎样才能摆脱这个问题?

0 投票
1 回答
268 浏览

erlang - Rebar eunit 运行非本地(非 Hipe)代码

我已经使用编译了我的 Erlang 模块

在 rebar.config 中使用以下选项

我看到代码确实被编译为本机,因为我在编译期间看到 Hipe 消息,并且 .beam 文件大小也大于非本机编译。

但是,当我跑步时

哪个测试我的模块我总是得到错误的

在我的测试模块中。

为什么 rebar 不将我的 eunit 测试作为本机代码运行?

我还在 reltool.config 文件中添加了这一行,

钢筋 2.1.0-pre 17 20140421_192321 git 2.1.0-pre-166-ged88055

0 投票
2 回答
1100 浏览

erlang - 使用 meck 对具有相同参数的相同方法进行多次调用

我知道使用 ruby​​/rspec,您可以执行以下操作,以便为对该方法进行的不同调用接收不同的返回值:

我只能使 meck 存根成为一个具有一个返回值的方法,如下所示:

有没有办法让它ok在第一次调用时返回,然后ok2在第二次调用时返回?

0 投票
0 回答
178 浏览

erlang - 有没有办法在 eunit 测试中调用 application:set_env ?

是否可以在 eunit 测试中设置被测代码中使用的环境变量?这失败了**error:undef

编辑:

没有太多可以显示的错误,但这里是完整的堆栈:

0 投票
1 回答
87 浏览

erlang - Eunit 断言错误报告错误的模块

我开始编写一些函数来帮助测试地图上的断言。

假设我有以下地图:

在我的业务逻辑中调用一个函数后,我希望地图看起来像这样:

换句话说,我期望

  • 地图在更新后具有相同数量的键
  • 的值a从 0 变为 1
  • b不变

我可以把这个测试留给模式匹配,但是,如果我有一个带有很多键(甚至可能有很多子图)的大地图,那么问题可能出在哪里并不明显 - 至少需要一些时间才能找到问题(也许我期望更新的一些值没有 - 或者可能有一些额外的键等,等等 - 我希望你明白这一点)。

因此,作为开始,我在我的模块中提出了以下辅助函数:

我从另一个由 eunit 执行的模块调用它:

我收到以下错误消息:

几乎是我想要的,因为它报告了地图中有问题的键和有问题的值,但是它报告了asserts模块中的错误,即使我有兴趣看到失败的实际测试,而不是对断言的引用模块。我认为测试生成器正好适合这一点,但我无法以这种方式工作。

有什么方法可以让我eunit报告实际的测试模块(map_tests功能/测试simple_map_test行 X)而不是我的asserts模块?