对每个 运行 期间 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 之间改变。)
当然,这个技巧不适用于从第三方服务接收的数据。
假设我的函数 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 之间改变。)
当然,这个技巧不适用于从第三方服务接收的数据。