public static async Task ExecuteViaReflectionAsync_TResult___Should_execute_the_operation___When_called()
        {
            // Arrange
            var operation1 = new SiblingOperation3
            {
                Value = 4,
            };

            var operation2 = new SiblingOperation4
            {
                Value = 6,
            };

            var operation3 = new SiblingOperation3
            {
                Value = 1,
            };

            var protocol = new SiblingOperationProtocol();

            // Act
            var actual1 = await protocol.ExecuteViaReflectionAsync <int>(operation1);

            var actual2 = await protocol.ExecuteViaReflectionAsync <int>(operation2);

            var actual3 = await protocol.ExecuteViaReflectionAsync <int>(operation3);

            // Assert
            actual1.AsTest().Must().BeEqualTo(7);
            actual2.AsTest().Must().BeEqualTo(10);
            actual3.AsTest().Must().BeEqualTo(4);
        }
        public static async Task GetProtocolAndExecuteViaReflectionAsync_TResult___Should_execute_the_operation___When_called()
        {
            // Arrange
            var operation1 = new SiblingOperation3
            {
                Value = 4,
            };

            var operation2 = new SiblingOperation4
            {
                Value = 6,
            };

            var operation3 = new SiblingOperation3
            {
                Value = 1,
            };

            var protocolFactory = new ProtocolFactory();

            protocolFactory.RegisterProtocolForSupportedOperations(typeof(SiblingOperationProtocol), () => new SiblingOperationProtocol());

            // Act
            var actual1 = await protocolFactory.GetProtocolAndExecuteViaReflectionAsync <int>(operation1);

            var actual2 = await protocolFactory.GetProtocolAndExecuteViaReflectionAsync <int>(operation2);

            var actual3 = await protocolFactory.GetProtocolAndExecuteViaReflectionAsync <int>(operation3);

            // Assert
            actual1.AsTest().Must().BeEqualTo(7);
            actual2.AsTest().Must().BeEqualTo(10);
            actual3.AsTest().Must().BeEqualTo(4);
        }
        public static void ExecuteViaReflection_TResult___Should_execute_the_operation___When_called()
        {
            // Arrange
            var operation1 = new SiblingOperation3
            {
                Value = 4,
            };

            var operation2 = new SiblingOperation4
            {
                Value = 6,
            };

            var operation3 = new SiblingOperation3
            {
                Value = 1,
            };

            var protocol = new SiblingOperationProtocol();

            // Act
            var actual1 = protocol.ExecuteViaReflection <int>(operation1);
            var actual2 = protocol.ExecuteViaReflection <int>(operation2);
            var actual3 = protocol.ExecuteViaReflection <int>(operation3);

            // Assert
            actual1.AsTest().Must().BeEqualTo(5);
            actual2.AsTest().Must().BeEqualTo(8);
            actual3.AsTest().Must().BeEqualTo(2);
        }
            public async Task <int> ExecuteAsync(SiblingOperation3 operation)
            {
                var result = operation.Value + 3;

                await Task.FromResult(result);

                return(result);
            }
            public int Execute(SiblingOperation3 operation)
            {
                var result = operation.Value + 1;

                return(result);
            }