We've come across this problem. The major testing frameworks seem to rely heavily on macros for tests.
In particular, we were struggling to handle tests of thrown exceptions, as we couldn't trivially capture the result in a variable and place that inside the macro instead.
The most versatile solution we found was to use a function pointer, so that the templating wasn't required when the function was called.