查看源代码 ExUnit.CaseTemplate (ExUnit v1.16.2)
定义一个模块模板,用于您的整个测试套件。
当有一组设置回调或一组应该在测试模块之间共享的函数时,这很有用。
假设您创建了一个名为 MyCase
的模块,它调用了 use ExUnit.CaseTemplate
。当一个测试用例模块调用 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
。