Understanding __using__, with a practical problem

You likely want this:

defmodule MyTestCase
  use ExUnit.CaseTemplate

  defmacro __using__(opts) do
    opts
    |> Keyword.put_new(:async, true)
    |> super()
  end
end

For overwriting a overwritable __using__ macro, you need to implement exactly that macro. To call the injected implementation with your changes you can use super(). There’s no need to fiddle with quote in this case as you never need to convert text of code into AST.