Testing the pipeline, not the methodintermediate
Calling a controller method skips routing, model binding, filters, authorisation and serialisation — which is where most API bugs actually are; WebApplicationFactory runs all of it in memory.
Routing, model binding, filters and serialisation. Test the endpoint, not the controller method.
The app under test, a real request, and assertions on both the status and the payload.
Published in full, before you start — every point is one of these and there is nothing else.
Calling a controller method skips routing, model binding, filters, authorisation and serialisation — which is where most API bugs actually are; WebApplicationFactory runs all of it in memory.
Calling .Result on a task blocks a thread that could have served another request, and under load that is the deadlock everyone has a story about — await is how you wait without holding anything up.