Why does my Moq claim no invocations are being thrown, yet it displays the thrown invocation in the exception?

you need

_mock.Verify(x => x.Send(
     It.IsAny<String>(), It.IsAny<String>(), It.IsAny<String>(), Times.Once());

cause it does not match the arguments passed in. Therefore it thinks it didn't call that method with those arguments.

You can Verify that the specific strings are passed into the mock method, but that will depend on what you are trying to test

In your particular case there is no point to the Setup method as the Verify will still work. Only when you need to return a value from a mocked method do you really need to use Setup.