有没有一种方法可以使用Elixir中的Doctest来测试IO输出?

3

我完全可以编写一个"普通"测试来捕获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
1个回答

4

您可以使用与普通测试相同的函数:ExUnit.CaptureIO.capture_io。然而,当您为该函数添加更多功能时,它可能不适用于文档测试。

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。=) - Ricardo Valeriano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接