Exemplo n.º 1
0
        public void SetUp()
        {
            this.container         = A.Fake <IFakeObjectContainer>();
            this.fakeObjectCreator = A.Fake <IFakeObjectCreator>();

            this.session = new DummyValueCreationSession(this.container, this.fakeObjectCreator);
        }
Exemplo n.º 2
0
        public void Should_return_false_for_restricted_types(Type restrictedType)
        {
            // Arrange
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakesNoDummy(),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(restrictedType, out dummy);

            // Assert
            result.Should().BeFalse();
        }
Exemplo n.º 3
0
        public void Should_return_false_when_default_constructor_throws()
        {
            // Arrange
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakesNoDummy(),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(typeof(TypeWithDefaultConstructorThatThrows), out dummy);

            // Assert
            result.Should().BeFalse();
        }
Exemplo n.º 4
0
        public void Should_not_be_able_to_create_class_with_circular_dependencies()
        {
            // Arrange
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakesNoDummy(),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(typeof(TypeWithCircularDependency), out dummy);

            // Assert
            result.Should().BeFalse();
        }
Exemplo n.º 5
0
        public void Should_return_default_value_when_type_is_value_type()
        {
            // Arrange
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakesNoDummy(),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(typeof(int), out dummy);

            // Assert
            result.Should().BeTrue();
            dummy.Should().Be(0);
        }
Exemplo n.º 6
0
        public void Should_return_false_when_type_cannot_be_created()
        {
            // Arrange
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakesNoDummy(),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(typeof(TypeThatCanNotBeInstantiated), out dummy);

            // Assert
            result.Should().BeFalse();
            dummy.Should().BeNull();
        }
Exemplo n.º 7
0
        public void Should_be_able_to_create_class_with_default_constructor()
        {
            // Arrange
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakesNoDummy(),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(typeof(ClassWithDefaultConstructor), out dummy);

            // Assert
            result.Should().BeTrue();
            dummy.Should().BeOfType <ClassWithDefaultConstructor>();
        }
Exemplo n.º 8
0
        public void Should_favor_the_widest_constructor_when_activating()
        {
            // Arrange
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakes("dummy value"),
                this.fakeObjectCreator);

            // Act
            object dummy;

            session.TryResolveDummyValue(typeof(TypeWithMultipleConstructorsOfDifferentWidth), out dummy);
            var typedDummy = (TypeWithMultipleConstructorsOfDifferentWidth)dummy;

            // Assert
            typedDummy.WidestConstructorWasCalled.Should().BeTrue();
        }
Exemplo n.º 9
0
        public void Should_be_able_to_create_class_with_resolvable_constructor_arguments()
        {
            // Arrange
            this.StubFakeObjectCreatorWithValue(A.Fake <IFoo>());
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakes("dummy string"),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(typeof(TypeWithResolvableConstructorArguments <string, IFoo>), out dummy);

            // Assert
            result.Should().BeTrue();
            dummy.Should().BeOfType <TypeWithResolvableConstructorArguments <string, IFoo> >();
        }
Exemplo n.º 10
0
        public void Should_return_dummy_from_container_when_available(object dummyInContainer)
        {
            Guard.AgainstNull(dummyInContainer, "dummyInContainer");

            // Arrange
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakes(dummyInContainer),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(dummyInContainer.GetType(), out dummy);

            // Assert
            result.Should().BeTrue();
            dummy.Should().BeSameAs(dummyInContainer);
        }
Exemplo n.º 11
0
        public void Should_return_fake_when_it_can_be_created()
        {
            // Arrange
            var fake = A.Fake <IFoo>();

            this.StubFakeObjectCreatorWithValue(fake);
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakesNoDummy(),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(typeof(IFoo), out dummy);

            // Assert
            result.Should().BeTrue();
            dummy.Should().BeSameAs(fake);
        }
Exemplo n.º 12
0
        public void Should_be_able_to_resolve_same_type_twice_when_successful()
        {
            // Arrange
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakes("dummy value"),
                this.fakeObjectCreator);

            object dummy;

            session.TryResolveDummyValue(typeof(string), out dummy);

            // Act
            var result = session.TryResolveDummyValue(typeof(string), out dummy);

            // Assert
            result.Should().BeTrue();
            dummy.Should().Be("dummy value");
        }
Exemplo n.º 13
0
        public void Should_be_able_to_create_lazy_wrapper()
        {
            // Arrange
            var fake = A.Fake <IFoo>();

            this.StubFakeObjectCreatorWithValue(fake);
            var session = new DummyValueCreationSession(
                this.CreateDummyFactoryThatMakesNoDummy(),
                this.fakeObjectCreator);

            // Act
            object dummy;
            var    result = session.TryResolveDummyValue(typeof(Lazy <IFoo>), out dummy);

            // Assert
            result.Should().BeTrue();
            dummy.Should().BeOfType <Lazy <IFoo> >();
            ((Lazy <IFoo>)dummy).Value.Should().BeSameAs(fake);
        }
Exemplo n.º 14
0
        public override void RegisterDependencies(DictionaryContainer container)
        {
            container.Register(c =>
                               FakeScope.Current);

            container.Register(c =>
                               c.Resolve <FakeScope>().FakeObjectContainer);

            container.RegisterSingleton <IExpressionCallMatcherFactory>(c =>
                                                                        new ExpressionCallMatcherFactory
            {
                Container = c
            });

            container.RegisterSingleton(c =>
                                        new ExpressionArgumentConstraintFactory(c.Resolve <IArgumentConstraintTrapper>()));

            container.RegisterSingleton <ExpressionCallRule.Factory>(c =>
                                                                     callSpecification => new ExpressionCallRule(new ExpressionCallMatcher(callSpecification, c.Resolve <ExpressionArgumentConstraintFactory>(), c.Resolve <MethodInfoManager>(), c.Resolve <ICallExpressionParser>())));

            container.RegisterSingleton(c =>
                                        new MethodInfoManager());

            container.Register <FakeAsserter.Factory>(c => x => OrderedAssertion.CurrentAsserterFactory.Invoke(x));

            container.RegisterSingleton <FakeManager.Factory>(c =>
                                                              (fakeObjectType, proxy) => new FakeManager(fakeObjectType, proxy));

            container.RegisterSingleton <FakeCallProcessorProvider.Factory>(c =>
                                                                            (typeOfFake, fakeOptions) =>
                                                                            new FakeManagerProvider(c.Resolve <FakeManager.Factory>(), c.Resolve <IFakeManagerAccessor>(), c.Resolve <IFakeObjectContainer>(), c.Resolve <IFakeWrapperConfigurer>(), typeOfFake, fakeOptions));

            container.RegisterSingleton <IFakeObjectCallFormatter>(c =>
                                                                   new DefaultFakeObjectCallFormatter(c.Resolve <ArgumentValueFormatter>(), c.Resolve <IFakeManagerAccessor>()));

            container.RegisterSingleton(c =>
                                        new ArgumentValueFormatter(c.Resolve <IEnumerable <IArgumentValueFormatter> >()));

            container.RegisterSingleton(c =>
                                        new CallWriter(c.Resolve <IFakeObjectCallFormatter>(), c.Resolve <IEqualityComparer <IFakeObjectCall> >()));

            container.RegisterSingleton <RecordingManager.Factory>(c =>
                                                                   x => new RecordingManager(x));

            container.RegisterSingleton <IFileSystem>(c =>
                                                      new FileSystem());

#if !SILVERLIGHT
            container.RegisterSingleton <FileStorage.Factory>(c =>
                                                              x => new FileStorage(x, c.Resolve <IFileSystem>()));
#endif

            container.RegisterSingleton <ICallExpressionParser>(c =>
                                                                new CallExpressionParser());

            container.RegisterSingleton <IExpressionParser>(c =>
                                                            new ExpressionParser(c.Resolve <ICallExpressionParser>()));

            container.RegisterSingleton <RecordingRuleBuilder.Factory>(c =>
                                                                       (rule, fakeObject) => new RecordingRuleBuilder(rule, c.Resolve <RuleBuilder.Factory>().Invoke(rule, fakeObject)));

            container.Register <IFakeCreatorFacade>(c =>
                                                    new DefaultFakeCreatorFacade(c.Resolve <IFakeAndDummyManager>()));

            container.Register <IFakeAndDummyManager>(c =>
            {
                var fakeCreator = new FakeObjectCreator(c.Resolve <IProxyGenerator>(), c.Resolve <IExceptionThrower>(), c.Resolve <FakeCallProcessorProvider.Factory>());
                var session     = new DummyValueCreationSession(c.Resolve <IFakeObjectContainer>(), new SessionFakeObjectCreator {
                    Creator = fakeCreator
                });

                return(new DefaultFakeAndDummyManager(session, fakeCreator));
            });

            container.RegisterSingleton(c => new CastleDynamicProxyGenerator(c.Resolve <CastleDynamicProxyInterceptionValidator>()));

            container.RegisterSingleton(c => new DelegateProxyGenerator());

            container.RegisterSingleton <IProxyGenerator>(c => new ProxyGeneratorSelector(c.Resolve <DelegateProxyGenerator>(), c.Resolve <CastleDynamicProxyGenerator>()));

            container.RegisterSingleton(
                c => new CastleDynamicProxyInterceptionValidator(c.Resolve <MethodInfoManager>()));

            container.RegisterSingleton <IExceptionThrower>(c => new DefaultExceptionThrower());

            container.RegisterSingleton <IFakeManagerAccessor>(c => new DefaultFakeManagerAccessor());

            container.Register <IFakeWrapperConfigurer>(c =>
                                                        new DefaultFakeWrapperConfigurer());

            container.Register(c =>
                               new FakeFacade(c.Resolve <IFakeManagerAccessor>(), c.Resolve <IFakeScopeFactory>(), c.Resolve <IFixtureInitializer>()));

            container.RegisterSingleton <IFakeScopeFactory>(c => new FakeScopeFactory());

            container.Register <IFixtureInitializer>(c => new DefaultFixtureInitializer(c.Resolve <IFakeAndDummyManager>(), c.Resolve <ISutInitializer>()));

            container.RegisterSingleton <IEqualityComparer <IFakeObjectCall> >(c => new FakeCallEqualityComparer());

            container.Register <IInterceptionAsserter>(c => new DefaultInterceptionAsserter(c.Resolve <IProxyGenerator>()));

            container.Register <IArgumentConstraintTrapper>(c => new ArgumentConstraintTrap());

            container.Register <IArgumentConstraintManagerFactory>(c => new ArgumentConstraintManagerFactory());

            container.RegisterSingleton <IOutputWriter>(c => new DefaultOutputWriter(Console.Write));

            container.Register <ISutInitializer>(c => new DefaultSutInitializer(c.Resolve <IFakeAndDummyManager>()));

            container.RegisterSingleton(c => new EventHandlerArgumentProviderMap());
        }
Exemplo n.º 15
0
 public bool TryCreateFakeObject(Type typeOfFake, DummyValueCreationSession session, out object result)
 {
     result = this.Creator.CreateFake(typeOfFake, FakeOptions.Empty, session, false);
     return(result != null);
 }
Exemplo n.º 16
0
        public override void RegisterDependencies(DictionaryContainer container)
        {
            container.RegisterSingleton(c =>
                                        new DynamicOptionsBuilder(
                                            c.Resolve <IEnumerable <IFakeOptionsBuilder> >()));

            container.RegisterSingleton(c =>
                                        new DynamicDummyFactory(
                                            c.Resolve <IEnumerable <IDummyFactory> >()));

            container.RegisterSingleton <IExpressionCallMatcherFactory>(c => new ExpressionCallMatcherFactory(c));

            container.RegisterSingleton(c =>
                                        new ExpressionArgumentConstraintFactory(c.Resolve <IArgumentConstraintTrapper>()));

            container.RegisterSingleton <ExpressionCallRule.Factory>(c =>
                                                                     callSpecification => new ExpressionCallRule(new ExpressionCallMatcher(callSpecification, c.Resolve <ExpressionArgumentConstraintFactory>(), c.Resolve <MethodInfoManager>())));

            container.RegisterSingleton(c =>
                                        new MethodInfoManager());

            container.Register <FakeAsserter.Factory>(c => calls => new FakeAsserter(calls, c.Resolve <CallWriter>()));

            container.RegisterSingleton <FakeManager.Factory>(c =>
                                                              (fakeObjectType, proxy) => new FakeManager(fakeObjectType, proxy));

            container.RegisterSingleton <FakeCallProcessorProvider.Factory>(c =>
                                                                            (typeOfFake, proxyOptions) =>
                                                                            new FakeManagerProvider(c.Resolve <FakeManager.Factory>(), c.Resolve <IFakeManagerAccessor>(), typeOfFake, proxyOptions));

            container.RegisterSingleton <IFakeObjectCallFormatter>(c =>
                                                                   new DefaultFakeObjectCallFormatter(c.Resolve <ArgumentValueFormatter>(), c.Resolve <IFakeManagerAccessor>()));

            container.RegisterSingleton(c =>
                                        new ArgumentValueFormatter(c.Resolve <IEnumerable <IArgumentValueFormatter> >()));

            container.RegisterSingleton(c =>
                                        new CallWriter(c.Resolve <IFakeObjectCallFormatter>(), c.Resolve <IEqualityComparer <IFakeObjectCall> >()));

#if FEATURE_SELF_INITIALIZED_FAKES
            container.RegisterSingleton <RecordingManager.Factory>(c =>
                                                                   x => new RecordingManager(x));

            container.RegisterSingleton <IFileSystem>(c =>
                                                      new FileSystem());

            container.RegisterSingleton <FileStorage.Factory>(c =>
                                                              x => new FileStorage(x, c.Resolve <IFileSystem>()));
#endif

            container.RegisterSingleton <ICallExpressionParser>(c =>
                                                                new CallExpressionParser());

            container.Register <IFakeAndDummyManager>(c =>
            {
                var fakeCreator      = new FakeObjectCreator(c.Resolve <IProxyGenerator>(), c.Resolve <IExceptionThrower>(), c.Resolve <FakeCallProcessorProvider.Factory>());
                var session          = new DummyValueCreationSession(c.Resolve <DynamicDummyFactory>(), new SessionFakeObjectCreator(fakeCreator));
                var fakeConfigurator = c.Resolve <DynamicOptionsBuilder>();

                return(new DefaultFakeAndDummyManager(session, fakeCreator, fakeConfigurator));
            });

            container.RegisterSingleton(c => new CastleDynamicProxyGenerator(c.Resolve <CastleDynamicProxyInterceptionValidator>()));

            container.RegisterSingleton(c => new DelegateProxyGenerator());

            container.RegisterSingleton <IProxyGenerator>(c => new ProxyGeneratorSelector(c.Resolve <DelegateProxyGenerator>(), c.Resolve <CastleDynamicProxyGenerator>()));

            container.RegisterSingleton(
                c => new CastleDynamicProxyInterceptionValidator(c.Resolve <MethodInfoManager>()));

            container.RegisterSingleton <IExceptionThrower>(c => new DefaultExceptionThrower());

            container.RegisterSingleton <IFakeManagerAccessor>(c => new DefaultFakeManagerAccessor());

            container.Register(c =>
                               new FakeFacade(c.Resolve <IFakeManagerAccessor>(), c.Resolve <IFixtureInitializer>()));

            container.Register <IFixtureInitializer>(c => new DefaultFixtureInitializer(c.Resolve <IFakeAndDummyManager>(), c.Resolve <ISutInitializer>()));

            container.RegisterSingleton <IEqualityComparer <IFakeObjectCall> >(c => new FakeCallEqualityComparer());

            container.Register <IInterceptionAsserter>(c => new DefaultInterceptionAsserter(c.Resolve <IProxyGenerator>()));

            container.Register <IArgumentConstraintTrapper>(c => new ArgumentConstraintTrap());

            container.Register <IArgumentConstraintManagerFactory>(c => new ArgumentConstraintManagerFactory());

            container.RegisterSingleton <IOutputWriter>(c => new DefaultOutputWriter(Console.Write));

            container.Register <ISutInitializer>(c => new DefaultSutInitializer(c.Resolve <IFakeAndDummyManager>()));

            container.RegisterSingleton(c => new EventHandlerArgumentProviderMap());

            container.Register(c => new SequentialCallContext(c.Resolve <CallWriter>()));
        }