Both return a builder (a function from name to context), rather then constructing a context. The test engine calls the builder, passing the name of the val (or function, if we add that) that it has discovered by classpath scanning. So either way, we have full control over when contexts get constructed and tests get executed.