有没有办法在 Elixir 中使用 Doctest 测试 IO 输出?
Is there a way to test an IO output using Doctest in Elixir?
我完全同意为此编写 "normal" 捕获 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
我完全同意为此编写 "normal" 捕获 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