public void SetUp() { this.container = A.Fake <IFakeObjectContainer>(); this.fakeObjectCreator = A.Fake <IFakeObjectCreator>(); this.session = new DummyValueCreationSession(this.container, this.fakeObjectCreator); }
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(); }
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(); }
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(); }
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); }
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(); }
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>(); }
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(); }
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> >(); }
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); }
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); }
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"); }
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); }
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()); }
public bool TryCreateFakeObject(Type typeOfFake, DummyValueCreationSession session, out object result) { result = this.Creator.CreateFake(typeOfFake, FakeOptions.Empty, session, false); return(result != null); }
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>())); }