假设我的函数返回一个映射,并且可能会随机生成一些值。我希望能够至少再次测试输出类型,换句话说 - 从doctest级别检查天气返回值是一张地图。最终它包含特定的键。它甚至可能吗?函数调用可能如下所示:
iex> MyApp.function(params, opts)
%{_}
输出不能是模式,但你可以使用is_map
或match?
宏和模式%{}
,如果值是一个映射,它们都将返回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
。在这种情况下,从函数返回的随机值将是相同的(它不会在不同的运行之间发生变化。)
当然,这个技巧不适用于从第三方服务接收的数据。