对每个 运行 期间 returns 不同映射的函数进行文档测试

Doctesting a function that returns different map during every run

假设我的函数 returns 一张地图和一些值可能是随机生成的。我希望至少能够再次测试输出类型,或者换句话说 - 从 doctest 级别检查天气返回值是一张地图。最终它是否包含特定的键。有可能吗?函数调用可能如下所示:

iex> MyApp.function(params, opts)
%{_}

输出不能是模式,但您可以使用 is_map 或带有模式 %{}match? 宏,两者都将 return true 如果值是地图。

iex> is_map MyApp.function(params, opts)
true
iex> match? %{}, MyApp.function(params, opts)
true

虽然@Dogbert 的回答完全正确,但并非在所有情况下都适用。当需要检查一个事先不可预测的值(比如随机生成的值)时,仍然可以使用 ExUnit.

来做到这一点

每个 运行 测试套件打印出 随机种子 值作为测试的最后一行 运行:

Randomized with seed 486290

它可能会被记录下来并传回给ExUnit.configure/1。在这种情况下,从函数返回的随机值将是相同的(它不会在不同的 运行s 之间改变。)

当然,这个技巧不适用于从第三方服务接收的数据。