It turns out that [CaptureConsole] doesn't capture all output. It only captures output to the console for code running in the same thread as the unit test. If you use a TestHost then the ultimate code in the controllers runs in a separate thread and that console output is not captured. Created a documentation issue in github.com/xunit/xunit/issues/3399