【问题标题】:Erlang: How to assertMatch IoDevice value?Erlang:如何断言匹配 IoDevice 值?
【发布时间】:2021-03-16 18:08:47
【问题描述】:

我正在尝试编写一个打开文件的测试。文件打开返回表单的值:

{ok, IoDevice} | {error, Reason}

IoDevice 示例值为:<0.941.0>

到目前为止,我已经尝试了以下方法(其中一些我不相信他们会成功......):

?assertMatch([], theIoDevice).
?assertMatch("[]", theIoDevice).
?assertMatch(<>, theIoDevice). % Won't compile 

还有几次测试,但我失败了。

IoDevice 模式的匹配方式是什么?

是否有可能匹配到正则表达式?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    file:open/2 总是返回一个带有两个元素的tuple

    1. 原子ok 和处理文件的进程的pid(genserver)。

    或:

    1. 原子error 和一个字符串。但是因为字符串是创建列表的快捷方式,所以元组实际上包含原子error 和一个列表。

    但是theIoDevice 是一个原子,它永远不会匹配空列表[] 或两个元素列表"[]",这是创建列表[91,93] 的快捷方式。

    您无法提前知道正在处理文件的进程的 pid,因此您无法尝试匹配特定的 pid,但您可以断言您从 file:open/2 得到了 {ok, _}。如果您想更细化,可以使用is_pid/1 检查第二个元素:

    ?assert(is_pid(File)).
    

    您可以像这样手动创建一个 pid:

    list_to_pid("<0.4.1>") -> pid()
    

    【讨论】:

      猜你喜欢
      • 2021-04-13
      • 2019-12-04
      • 2016-05-14
      • 2011-11-27
      • 1970-01-01
      • 2014-06-27
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多