檢視原始碼 ExUnit.CaseTemplate (ExUnit v1.16.2)

定義模組範本,供整個測試套件使用。

當有一組設定回呼或一組函式應該在測試模組間共用時,這會很有用。

假設你建立一個呼叫 use ExUnit.CaseTemplateMyCase 模組。當測試案例模組呼叫 use MyCase 時,以下內容為真

  • 所有 MyCaseuse ExUnit.Case 可取得的功能都可用 (如同 MyCase 直接呼叫 use ExUnit.Case)

  • 你在 MyCase 中定義的 setupsetup_all 回呼會在測試案例模組中使用

你傳遞給 use MyCase 的選項也會在幕後傳遞給 use ExUnit.Case。這表示你可以執行 use MyCase, async: true 等動作。你也可以在 using/2 中存取這些選項。

use ExUnit.CaseTemplate

當你 use ExUnit.CaseTemplate 時,它會從 ExUnit.AssertionsExUnit.Callbacks 和此模組本身匯入功能。它也會定義一個 __using__ 回呼,因此模組本身可以用作範本,而非 ExUnit.Case

範例

defmodule MyCase do
  use ExUnit.CaseTemplate

  setup do
    IO.puts("This will run before each test that uses this case")
  end
end

defmodule MyTest do
  use MyCase, async: true

  test "truth" do
    assert true
  end
end

如果你需要「掛入」use MyCase 並執行其他動作,你可以使用 using/2 巨集。請參閱其文件以取得更多資訊和範例。

defmodule MyCase do
  use ExUnit.CaseTemplate

  using do
    quote do
      import MyApp.TestHelpers
    end
  end
end

摘要

函式

當使用案例範本時,允許開發人員自訂 using 區塊。

函式

連結至這個巨集

using(var \\ quote do _ end, list)

檢視原始碼 (巨集)

當使用案例範本時,允許開發人員自訂 using 區塊。

呼叫 using/2 時,你可以使用一個選用的 var 參數。ExUnit 會將你傳遞給 use MyCase 的任何參數傳遞為這個 var 參數。請參閱以下範例以釐清。

範例

defmodule MyCase do
  use ExUnit.CaseTemplate

  using do
    quote do
      # This code is injected into every case that calls "use MyCase"
      alias MyApp.FunModule
    end
  end
end

你可以指定一個參數給 using/2

defmodule MyCase do
  use ExUnit.CaseTemplate

  using options do
    quote do
      if unquote(options)[:import_helpers] do
        import MyApp.TestHelpers
      end
    end
  end
end

傳遞給 use MyCase 的第二個參數也會轉發給 using/2

defmodule SomeTestCase do
  use MyCase, async: true, import_helpers: true

  test "the truth" do
    # truth/0 comes from MyApp.TestHelpers:
    assert truth()
  end
end

use ExUnit.Case 共享選項

你傳遞給 use MyCase 的第二個參數也會傳遞為 use ExUnit.Case 的第二個參數。