使用状态记录的单元测试过程

时间:2011-04-14 20:05:17

标签: unit-testing erlang

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

可能的方法:

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

1 个答案:

答案 0 :(得分:4)

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

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