Elixir:Doctest,APIドキュメントに直接テストを記述する

1691 ワード

クイックハンド


モジュールDoctestの作成、およびテストドキュメント
defmodule Doctest do

  @doc """
  ## Examples

      iex> Doctest.add(1, 2)
      3
  """
  def add(a, b) do
    :not_implemented
  end
end

テストコードを作成し、ファイルtests/doctest_test.exsに保存
defmodule DoctestTest do
  use ExUnit.Case, async: true
  doctest Doctest
end

テストの実行
➜  mix test
lib/doctest.ex:9: warning: variable a is unused
lib/doctest.ex:9: warning: variable b is unused
Compiled lib/doctest.ex

  1) test doc at Doctest.add/2 (1) (DoctestTest)
     test/doctest_test.exs:3
     Doctest failed
     code: Doctest.add(1, 2) === 3
     lhs:  :not_implemented
     stacktrace:
       lib/doctest.ex:6: Doctest (module)

.

Finished in 0.1 seconds (0.1s on load, 0.00s on tests)
2 tests, 1 failure

Randomized with seed 301161

次に、Doctestモジュールのadd/2関数を事前に実行し、ここでテストを実行します.
defmodule Doctest do

  @doc """
  ## Examples

      iex> Doctest.add(1, 2)
      3
  """
  def add(a, b) do
    a + b
  end
end

もう一度テストして、テストが合格したのを見ました.
➜  mix test
Compiled lib/doctest.ex
..

Finished in 0.1 seconds (0.1s on load, 0.00s on tests)
2 tests, 0 failures

Randomized with seed 292239

注意点

  • ドキュメントのテストは4つのスペースでインデントされ、iex>
  • に続いています.
  • テストコードが複数行ある場合は、...>で改行することができ、IExに複数行コードを入力するのと同様であるが、(1)のような番号はない:
    iex(1)> defmodule A do
    ...(1)>   IO.puts "Create a module: A"
    ...(1)> end
    
  • .