public void ShouldFindBuilderInReferencedAssemblyNotYetLoaded()
        {
            // Arrange
            // Pre-Assert
            // Act
            var builderType = GenericBuilderLocator.TryFindBuilderInAnyOtherAssemblyInAppDomainFor(
                typeof(ObjectToBuildWithNotLoadedBuilder)
                );

            // Assert
            Expect(builderType).Not.To.Be.Null();
        }
        public void TryFindExistingBuilderFor_WhenHaveExistingBuilder_ShouldUseIt()
        {
            //---------------Set up test pack-------------------

            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var result = GenericBuilderLocator.TryFindExistingBuilderFor(typeof(SomeClassWithKnownBuilder));

            //---------------Test Result -----------------------
            Expect(result).To.Equal(typeof(SomeClassWithKnownBuilderBuilder));
        }
        public void FindOrGenerateDynamicBuilderFor_GivenNull_ShouldReturnNull()
        {
            //---------------Set up test pack-------------------

            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var result = GenericBuilderLocator.FindOrGenerateDynamicBuilderFor(null);

            //---------------Test Result -----------------------
            Expect(result).To.Be.Null();
        }
        public void TryFindExistingBuilderFor_GivenNullType_ShouldReturnNull()
        {
            //---------------Set up test pack-------------------

            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var result = GenericBuilderLocator.TryFindExistingBuilderFor(null);

            //---------------Test Result -----------------------
            Expect(result).To.Be.Null();
        }
        public void TryFindExistingBuilderFor_ShouldBeAbleToFindBuilderInAnotherAssembly()
        {
            //---------------Set up test pack-------------------
            var type = typeof(SomeEntityWithBuilder);

            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var builderType = GenericBuilderLocator.TryFindExistingBuilderFor(type);

            //---------------Test Result -----------------------
            Expect(builderType).To.Equal(typeof(SomeEntityWithBuilderBuilder));
        }
        public void FindOrGenerateDynamicBuilderFor_GivenTypeWithNoBuilder_SecondCallShouldReturnSameBuilderType()
        {
            //---------------Set up test pack-------------------
            var type = typeof(SomeClassWithoutABuilder2);

            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var result1 = GenericBuilderLocator.FindOrGenerateDynamicBuilderFor(type);
            var result2 = GenericBuilderLocator.FindOrGenerateDynamicBuilderFor(type);

            //---------------Test Result -----------------------
            Assert.AreEqual(result1, result2);
        }
        public void TryFindExistingBuilderFor_WhenHaveMultipleBuilders_ShouldReturnBuilderWithClosestNamespaceMatch()
        {
            //---------------Set up test pack-------------------
            var entityType = typeof(AnotherEntityWithBuilder);

            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var result = GenericBuilderLocator.TryFindExistingBuilderFor(entityType);

            //---------------Test Result -----------------------
            Expect(typeof(GenericBuilderTestArtifactBuilders.Sub1.AnotherEntityWithBuilderBuilder))
            .To.Equal(result);
        }
예제 #8
0
        private TEntity BuildWithBuilder()
        {
            var entityType  = typeof(TEntity);
            var builderType = GenericBuilderLocator.TryFindExistingBuilderFor(entityType)
                              ?? GenericBuilderLocator.FindOrGenerateDynamicBuilderFor(entityType);

            Assert.IsNotNull(builderType, $"Can't find or create a builder for {entityType.Name}");
            var builder = Activator.CreateInstance(builderType) as IGenericBuilder;

            Assert.IsNotNull(builder, $"Located builder {builderType.Name} does not implement IGenericBuilder");
            var entity = builder.GenericWithRandomProps().GenericBuild() as TEntity;

            Assert.IsNotNull(entity, $"located builder {builderType.Name} for {entityType.Name} builds NULL or invalid entity");
            return(entity);
        }
        public void GetBuilderFor_WhenCannotFindExistingBuilderForType_ShouldGenerateIt()
        {
            //---------------Set up test pack-------------------
            var type = typeof(AnotherEntityWithoutBuilder);

            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var builder        = GenericBuilderLocator.GetBuilderFor(type);
            var dynamicBuilder = GenericBuilderLocator.FindOrGenerateDynamicBuilderFor(type);

            //---------------Test Result -----------------------
            Expect(builder).Not.To.Be.Null();
            Expect(dynamicBuilder).To.Equal(builder);
        }
        public void FindOrGenerateDynamicBuilderFor_GivenTypeWithNoBuilder_FirstCallShouldCreateBuilderType()
        {
            //---------------Set up test pack-------------------
            var type = typeof(SomeClassWithoutABuilder1);

            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var result = GenericBuilderLocator.FindOrGenerateDynamicBuilderFor(type);

            //---------------Test Result -----------------------
            Expect(result).Not.To.Be.Null();
            var genericBuilderType = typeof(GenericBuilder <,>);
            var baseType           = result.BaseType;

            Expect(genericBuilderType).To.Equal(baseType.GetGenericTypeDefinition());
            Expect(type).To.Equal(baseType.GetGenericArguments()[1]);
        }
        public void TryFindExistingBuilderFor_WhenCannotFindExistingBuilderInAnotherAssembly_ShouldReturnNull()
        {
            //---------------Set up test pack-------------------
            var type = typeof(SomeEntityWithoutBuilder);

            //---------------Assert Precondition----------------
            var existingBuilders = AppDomain.CurrentDomain
                                   .GetAssemblies()
                                   .SelectMany(a => a.GetTypes())
                                   .Where(t => t.IsBuilderFor(type));

            Expect(existingBuilders).To.Be.Empty();
            //---------------Execute Test ----------------------
            var builderType = GenericBuilderLocator.TryFindExistingBuilderFor(type);

            //---------------Test Result -----------------------
            Expect(builderType).To.Be.Null();
        }