I find this question rather enigmatic.  As Nasser notes in a comment every Symbol has a context.  You should be aware that Symbols are created during parsing.  See:  http://mathematica.stackexchange.com/q/8295/121.

You also say "The following works" so I wonder why you are not using that.  Perhaps you want:

    SetAttributes[call, HoldAll];
    
    call[file_String, function_, args___] :=
      Block[{$ContextPath, function}, Get[file]; function[args]]

Use would be:

    call["test.m", test, "thing to print"]

> thing to print

Note that the symbol ``Global`test`` is created as described in the linked Q&A above, but it is not defined.

----------

On reflection, perhaps you just want to load definitions into a private context (e.g. ``test` ``) that is not on the `$ContextPath`.  That can be done like this:

    Block[{$ContextPath = {"test`", "System`"}, $Context = "test`"}, Get["test.m"]]

This is essentially equivalent to `BeginPackage` but it works as a single line of code.

The defined function is then called with ``test`test``:

    test`test["thing 2"]

> thing 2