有没有办法在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 
+0

呀,理解。 是的,对于这个特定的事情,我认为最好只是去“实际”测试。但是这澄清了一堆。 谢谢@Dogbert。 =)。 –