查看源代码 ExUnit.CaseTemplate (ExUnit v1.16.2)

定义一个模块模板,用于您的整个测试套件。

当有一组设置回调或一组应该在测试模块之间共享的函数时,这很有用。

假设您创建了一个名为 MyCase 的模块,它调用了 use ExUnit.CaseTemplate。当一个测试用例模块调用 use MyCase 时,以下内容成立

  • MyCase 将从 use 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