我在 Elixir 中有一个函数,可以在列表中生成三个随机 RGB 元组。
defmodule Color do
@doc """
Create three random r,g,b colors as a list of three tuples
## Examples
iex> colors = Color.pick_color()
iex> colors
[{207, 127, 117}, {219, 121, 237}, {109, 101, 206}]
"""
def pick_color() do
color = Enum.map((0..2), fn(x)->
r = Enum.random(0..255)
g = Enum.random(0..255)
b = Enum.random(0..255)
{r, g, b}
end)
end
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,我的文档测试失败了。生成的元组列表与我的文档测试中定义的不同。如何为返回随机值的函数编写文档测试?
您可以通过设置 的随机数生成器的种子来使随机函数具有确定性:rand。Elixir 中也是这样Enum.random/1测试的。
首先,打开iex当前进程的种子并将其设置为任意值:
iex> :rand.seed(:exsplus, {101, 102, 103})
Run Code Online (Sandbox Code Playgroud)
然后,运行你的函数iex
iex> Color.pick_color()
Run Code Online (Sandbox Code Playgroud)
现在只需将此值与调用一起复制到您的文档测试中即可:rand.seed。通过显式设置种子,您将从:rand模块中的函数获取相同的值并在内部Enum.random/1使用:rand。
iex(1)> :rand.seed(:exsplus, {1, 2, 3})
iex(2)> for _ <- 1..10, do: Enum.random(1..10)
[4, 3, 8, 1, 6, 8, 1, 6, 7, 7]
iex(3)> :rand.seed(:exsplus, {1, 2, 3})
iex(4)> for _ <- 1..10, do: Enum.random(1..10)
[4, 3, 8, 1, 6, 8, 1, 6, 7, 7]
iex(5)> :rand.seed(:exsplus, {1, 2, 3})
iex(6)> for _ <- 1..10, do: Enum.random(1..10)
[4, 3, 8, 1, 6, 8, 1, 6, 7, 7]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |