unit-testing - 使用状态记录的单元测试流程

标签 unit-testing erlang

我想对 gen_fsm 进行单元测试,该 gen_fsm 使用相当大的记录来记录其状态。该记录是在 erl 文件中定义的,该文件还定义了 gen_fsm,因此(据我所知)对其他模块不可见。

可能的方法:

  1. 将记录放入 hrl 文件中并将其包含在两个模块中。这没问题,但是会将 gen_fsm 逻辑上拥有的代码分散到多个文件中。
  2. 在单元测试模块中使用原始元组伪造记录。这会变得非常难看,因为记录已经超过 20 个字段。
  3. 从我的 gen_fsm 导出一个函数,该函数将使用一些 record_info 魔法将 proplist 转换为正确的记录类型。虽然可能,但我不喜欢污染我的模块接口(interface)的想法。
  4. 实际上生成 gen_fsm 并向其发送一系列消息,使其处于单元测试的正确状态。这种方法非常复杂(尽管 Meck 提供了帮助),我觉得我在浪费这些伟大的、纯粹的 Module:StateName 函数,我应该能够在没有大量设置的情况下调用它们。

还有其他建议吗?

最佳答案

您可能会考虑将测试直接放入 gen_fsm 模块中,这当然会让他们访问记录。如果您不想在生产代码中包含测试,并且假设您使用的是 eunit,则可以按照 eunit user's guide 中的指示有条件地编译它们。 :

-ifdef(EUNIT).
   % test code here
   ...
-endif.

关于unit-testing - 使用状态记录的单元测试流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5669016/

相关文章:

erlang - 如何使用 Erlang 发送推送通知?

exception - 如何在 Erlang 中捕获异常消息?

erlang - 配置 Couchbase 2.2 使用短主机名

unit-testing - 如何仅在第一次调用模拟方法时抛出异常?

javascript - React-testing-library 为什么 toBeInTheDocument() 不是一个函数

unit-testing - 仅根据spock的调用次数模拟出方法的返回

debugging - 如何找出导致 Erlang 运行时错误的原因?

erlang - 在启动时动态设置节点名称

linux - 在 unix 中转置一个文件

java - 如何对包含 CompletableFuture 的方法进行单元测试?