public void PopulatePushesNestedInstanceIntoBuildChainWhileCreatingTest()
        {
            var office = new Office();
            var address = new Address();
            var testPassed = false;

            var creator = Substitute.For<ITypeCreator>();
            var generator = Substitute.For<IValueGenerator>();
            var buildStrategy = Substitute.For<IBuildStrategy>();

            var target = new DefaultExecuteStrategy();

            target.Initialize(buildStrategy, buildStrategy.GetBuildLog());

            buildStrategy.CreationRules.Returns(new List<CreationRule>().AsReadOnly());
            buildStrategy.ValueGenerators.Returns(
                new List<IValueGenerator>
                {
                    generator
                }.AsReadOnly());
            buildStrategy.TypeCreators.Returns(
                new List<ITypeCreator>
                {
                    creator
                }.AsReadOnly());
            creator.CanCreate(Arg.Any<Type>(), Arg.Any<string>(), Arg.Any<LinkedList<object>>()).Returns(true);
            creator.Create(typeof(Office), null, Arg.Any<LinkedList<object>>()).Returns(office);
            creator.Create(typeof(Address), "Address", Arg.Is<LinkedList<object>>(x => x.Last.Value == office))
                .Returns(address);
            creator.AutoPopulate.Returns(true);
            generator.When(
                x =>
                    x.Generate(
                        typeof(string),
                        Arg.Any<string>(),
                        Arg.Is<LinkedList<object>>(y => y.Last.Value == address))).Do(
                x =>
                {
                    target.BuildChain.Should().HaveCount(2);
                    target.BuildChain.First.Value.Should().Be(office);
                    target.BuildChain.Last.Value.Should().Be(address);
                    testPassed = true;
                });

            generator.IsSupported(typeof(string), Arg.Any<string>(), Arg.Any<LinkedList<object>>()).Returns(true);
            generator.Generate(typeof(string), Arg.Any<string>(), Arg.Any<LinkedList<object>>())
                .Returns(Guid.NewGuid().ToString());

            target.Create(typeof(Office));

            testPassed.Should().BeTrue();
        }