unit-testing - 有没有办法使用 Elixir 中的 Doctest 测试 IO 输出?

标签 unit-testing io elixir doctest ex-unit

我完全可以为此编写一个捕获 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。尽管当您向函数添加更多功能时,这可能不是适合文档测试的函数。

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

关于unit-testing - 有没有办法使用 Elixir 中的 Doctest 测试 IO 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46698441/

相关文章:

unit-testing - 集成和单元测试之间的 Grails 污染

javascript - 如何在 Javascript 中读取本地文件(从 Electron 应用程序运行)

java - 在 Groovy 中收集执行外部命令的输出的差异

java - 截断内存映射文件

elixir - umbrella 应用程序中的共享代码

c# - 如果测试方法失败,如何使构建失败?

java - Spring Boot 在测试时模拟其他休息客户端

c# - ASP.Net MVC 4 自定义 ValidationAttribute 依赖注入(inject)

websocket - 打开与本地服务器的 websocket 连接

elixir - 模块 Bcrypt.Base 不可用