private async Task ExecuteTest(SensorState sensorState, MqttStringMessage[] inputMessages, Action <List <IActionMessage> > assertAction) { CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); var sensorStates = new Subject <SensorState>(); var stringMessages = new Subject <MqttStringMessage>(); var messagesWithState = MessageProcessor.CombineMqMessagesWithSensorState(stringMessages, sensorStates); var processingPipeline = _messageProcessor.CreateMessageProcessingPipeline(cancellationTokenSource.Token, messagesWithState); List <IActionMessage> actionMessages = new List <IActionMessage>(); var subscription = processingPipeline.Subscribe(action => { Console.WriteLine($"msg: {action}"); actionMessages.Add(action); }); sensorStates.OnNext(sensorState); foreach (var inputMessage in inputMessages) { stringMessages.OnNext(inputMessage); } stringMessages.OnCompleted(); sensorStates.OnCompleted(); cancellationTokenSource.Cancel(); await processingPipeline.ToArray(); subscription.Dispose(); assertAction(actionMessages); }