Erlang:如何断言匹配 IoDevice 值?

Erlang: How to assertMatch IoDevice value?

我正在尝试编写打开文件的测试。文件打开 returns 形式的值:

{ok, IoDevice} | {error, Reason}

IoDevice 示例值为:<0.941.0>

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

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

还有更多的测试,但我失败了。

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

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

file:open/2 总是 returns a tuple 有两个元素:

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

或:

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

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

您无法提前知道正在处理文件的进程的 pid,因此您无法尝试匹配特定的 pid,但您可以断言您从 {ok, _} 返回file:open/2。如果你想更细化,你可以用 is_pid/1:

检查第二个元素
?assert(is_pid(File)).

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

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