public void typed_failing_tryfire_command_should_fail()
        {
            var          bus          = new CommandBus("local");
            const int    data         = 12356;
            const string errText      = @"I knew this would happen.";
            long         gotResponse  = 0;
            long         responseData = 0;

            bus.Subscribe(new AdHocTypedCommandHandler <TestCommands.TypedTestCommand, TestCommands.TestFailedCommandResponse>(
                              cmd => new TestCommands.TestFailedCommandResponse(cmd, new CommandException(errText, cmd), data)));
            bus.Subscribe(new AdHocHandler <TestCommands.TestFailedCommandResponse>(
                              cmd =>
            {
                Interlocked.Exchange(ref gotResponse, 1);
                Interlocked.Exchange(ref responseData, cmd.Data);
            }
                              ));

            CommandResponse response;
            var             command = new TestCommands.TypedTestCommand(Guid.NewGuid(), null);
            var             passed  = bus.TryFire(command, out response);

            Assert.False(passed, "Expected false return");
            Assert.IsType(typeof(TestCommands.TestFailedCommandResponse), response);
            Assert.IsType(typeof(CommandException), ((Fail)response).Exception);
            Assert.Equal($"{command.GetType().Name}: {errText}", ((Fail)response).Exception.Message);
            Assert.Equal(data, ((TestCommands.TestFailedCommandResponse)response).Data);
            Assert.IsOrBecomesTrue(() => Interlocked.Read(ref gotResponse) == 1, null, "Expected Fail");
            Assert.IsOrBecomesTrue(() => data == responseData);
        }