有没有办法在Elixir中使用Doctest测试IO输出?
问题描述:
我完全可以写一个“正常”测试,为此捕获IO
。有没有办法在Elixir中使用Doctest测试IO输出?
只想知道是否可以使用Doctest。
一个例子是:
defmodule CLI do
@doc """
Politely says Hello.
## Examples
iex> CLI.main([])
"Hello dear person." # this would be the expected IO output
"""
def main(args) do
IO.puts "Hello dear person."
end
end
defmodule CLITest do
use ExUnit.Case
doctest CLI
end
答
您可以使用相同的功能,你会在一个正常的测试使用:ExUnit.CaptureIO.capture_io
。尽管在函数中添加更多功能时,这可能不是一个适用于doctests的函数。
defmodule CLI do
@doc """
Politely says Hello.
## Examples
iex> import ExUnit.CaptureIO
iex> capture_io(fn -> CLI.main([]) end)
"Hello dear person.\\n"
"""
def main(args) do
IO.puts "Hello dear person."
end
end
$ mix test
.
Finished in 0.03 seconds
1 test, 0 failures
呀,理解。 是的,对于这个特定的事情,我认为最好只是去“实际”测试。但是这澄清了一堆。 谢谢@Dogbert。 =)。 –