public async Task ShouldThrowIfGatewayHasntBeenStarted(
                uint interval,
                [Target] DefaultGatewayService gateway
                )
            {
                Func <Task> func = () => gateway.StartHeartbeat(interval);

                await func.Should().ThrowAsync <OperationCanceledException>();
            }
            public async Task ShouldThrowIfGatewayWasStopped(
                uint interval,
                [Target] DefaultGatewayService gateway
                )
            {
                var cancellationToken = new CancellationToken(false);

                await gateway.StartAsync();

                await gateway.StopAsync();

                Func <Task> func = () => gateway.StartHeartbeat(interval);

                await func.Should().ThrowAsync <OperationCanceledException>();
            }
            public async Task ShouldStopSendingHeartbeatsToTheTxWorker(
                uint interval,
                int sequenceNumber,
                [Frozen] ITimer heartbeat,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Frozen, Substitute] ITimerFactory timerFactory,
                [Target] DefaultGatewayService gateway
                )
            {
                gateway.SequenceNumber = sequenceNumber;
                await gateway.StartAsync();

                await gateway.StartHeartbeat(interval);

                await gateway.StopHeartbeat();

                await heartbeat.Received().Stop();
            }
            public async Task ShouldStartSendingAHeartbeatToTheTxWorker(
                uint interval,
                int sequenceNumber,
                [Frozen] ITimer timer,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Frozen, Substitute] ITimerFactory timerFactory,
                [Target] DefaultGatewayService gateway
                )
            {
                var cancellationToken = new CancellationToken(false);

                gateway.SequenceNumber = sequenceNumber;
                await gateway.StartAsync();

                await gateway.StartHeartbeat(interval);

                timerFactory.Received().CreateTimer(Is <AsyncTimerCallback>(gateway.Heartbeat), Is((int)interval), Is("Heartbeat"));
                await timer.Received().Start();
            }
            public async Task StopShouldStopTheHeartbeat(
                ITimer heartbeat,
                [Frozen, Substitute] ITimerFactory timerFactory,
                [Frozen, Substitute] IGatewayTxWorker txWorker,
                [Frozen, Substitute] IGatewayUtilsFactory factory,
                [Target] DefaultGatewayService gateway
                )
            {
                var cancellationToken = new CancellationToken(false);

                timerFactory.CreateTimer(Any <AsyncTimerCallback>(), Any <int>(), Is("Heartbeat")).Returns(heartbeat);

                await gateway.StartAsync();

                await gateway.StartHeartbeat(10);

                await gateway.StopAsync();

                await heartbeat.Received().Stop();
            }