檢視原始碼 ExUnit.CaseTemplate (ExUnit v1.16.2)
定義模組範本,供整個測試套件使用。
當有一組設定回呼或一組函式應該在測試模組間共用時,這會很有用。
假設你建立一個呼叫 use ExUnit.CaseTemplate
的 MyCase
模組。當測試案例模組呼叫 use MyCase
時,以下內容為真
所有
MyCase
從use ExUnit.Case
可取得的功能都可用 (如同MyCase
直接呼叫use ExUnit.Case
)你在
MyCase
中定義的setup
和setup_all
回呼會在測試案例模組中使用
你傳遞給 use MyCase
的選項也會在幕後傳遞給 use ExUnit.Case
。這表示你可以執行 use MyCase, async: true
等動作。你也可以在 using/2
中存取這些選項。
use ExUnit.CaseTemplate
當你
use ExUnit.CaseTemplate
時,它會從ExUnit.Assertions
、ExUnit.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 區塊。
呼叫 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
的第二個參數。