public async Task GivenMappingFromObjectAToObjectB_WhenSolvingCollectionToCollection_ItShouldResolve()
        {
            // pre-arrangement
            int counter = 0;
            var expectedReturnObject = new TestObjectB();

            // arrange
            var semanticBuilder = new SemanticBuilder();
            semanticBuilder.InstallPipe<TestObjectA, TestObjectB>((source, innerBroker) =>
            {
                counter++;
                return expectedReturnObject;
            });

            ISemanticBroker semanticBroker = semanticBuilder.CreateBroker();

            // act
            var enumerable = await semanticBroker.On(new[] {new TestObjectA()}.AsEnumerable())
                .Output<IEnumerable<TestObjectB>>();


            // assert
            TestObjectB returnedType = enumerable.Single();
            Assert.AreSame(expectedReturnObject, returnedType);
            Assert.AreEqual(1, counter);
        }
        public async Task GivenAtoListB_WhenSolvingSingleAToArraytB_ItShouldResolve()
        {
            // pre-arrangement
            var expectedReturnObject = new TestObjectB();


            // arrange
            var semanticBuilder = new SemanticBuilder();
            semanticBuilder.InstallPipe<TestObjectA, List<TestObjectB>>(
                (source, innerBroker) => new List<TestObjectB>() { expectedReturnObject });

            ISemanticBroker semanticBroker = semanticBuilder.CreateBroker();

            // act
            var enumerable = await semanticBroker.On(new TestObjectA()).Output<TestObjectB[]>();


            // assert
            TestObjectB returnedType = enumerable.Single();
            Assert.AreSame(expectedReturnObject, returnedType);
        }