public void Building_collections_using_HavingListOf()
        {
            /*
             * Build an Order that contains two LineItems.
             */
            #region Hint

            /*
             * Use HavingListOf() method on the builder to assign two line items to the order.
             */

            #endregion Hint

            order = __;

            // Assert.
            order.Print();
            order.LineItems.ShouldNotBe( null );
            order.LineItems.Count.ShouldBe( 2 );
            order.LineItems[0].Description.ShouldNotBeEmpty();
            order.LineItems[1].Description.ShouldNotBeEmpty();
        }
        public void Using_AfterBuild_to_customize_the_object_after_it_is_built()
        {
            /*
             * Ensure that each LineItem in an Order has a reference to the Order.
             */
            #region Hint

            /*
             * Override builder.AfterBuilding() method and in it
             * iterate through the order's line items and set thier Order property.
             */

            #endregion Hint

            order = __;

            // Assert.
            order.Print();
            order.LineItems[0].Order.ShouldBe( order );
            order.LineItems[1].Order.ShouldBe( order );
        }
        public void Using_a_custom_builder_to_customize_object_creation()
        {
            /*
             * Create a custom OrderBuilder so that by default, it builds an Order with a Customer and two LineItems.
             */
            #region Hint

            /*
             * Create a new class that extends DynamicFluentBuilder<Order>.
             * Set the default values in the constructor of the class.
             *  - Use SetProperty() to populate the customer
             *  - Use AddToList() to populate the line items.
             */

            #endregion Hint

            order = __;

            // Assert.
            order.Print();
            order.Customer.ShouldNotBe( null );
            order.LineItems.ShouldNotBe( null );
            order.LineItems.Count.ShouldBe( 2 );
            order.LineItems[0].Description.ShouldNotBeEmpty();
            order.LineItems[1].Description.ShouldNotBeEmpty();
        }
        public void Nesting_builders_by_setting_a_property_to_another_builder()
        {
            /*
             * Build an Order object for customer Bob Smith.
             */
            #region Hint

            /*
             * Use the For() method to set the customer property.
             * Use another builder to create the customer.
             * This builder can be nested right inside the Order builder.
             * You can assign a builder directly to the property. You don't have to call build().
             */

            #endregion Hint
            #region Extra Credit

            /*
             * Delegate the creation of the builder to a static class called "Anonymous".
             */

            #endregion Extra Credit

            order = __;

            // Assert.
            order.Print();
            order.Customer.ShouldNotBe( null );
            order.Customer.FirstName.ShouldBe( "Bob" );
            order.Customer.LastName.ShouldBe( "Smith" );
        }