Creando datos de ejemplo con NBuilder en .NET

Cuando estamos trabajando con pruebas de concepto, tests, etcétera resulta muy útil tener algún mecanismo que nos genere de manera rápida contenido para nuestra aplicación. Hace no mucho, estuve trabajando con NBuilder para generar mis datos.

Para instalar el paquete, podemos hacerlo a través de Nuget:

PM> Install-Package NBuilder

Para trabajar con esta librería, es necesario utilizar la clase estática Builder (using FizzWare.NBuilder;), a la cual le indicamos el nombre de la clase de la que queremos crear las instancias y el número de elementos:

            var logs = Builder<Log>.CreateListOfSize(10).Build();
            var users = Builder<User>.CreateListOfSize(10).Build();

Otro ejemplo muy común es generar objetos de distintas clases pudiendo indicar sobre algunas de las propiedades los valores que queremos utilizar:

            var descriptions = new List<string>();
            descriptions.Add("Description 1");
            descriptions.Add("Description 2");
            descriptions.Add("Description 3");
            descriptions.Add("Description 4");

            Random random = new Random();

            var countries = new List<string>();
            countries.Add("Spain");
            countries.Add("Germany");
            countries.Add("UK");
            countries.Add("USA");

            var events = Builder<Event>.CreateListOfSize(10)
                        .All()
                        .Do(e => e.Description = descriptions[random.Next(0, descriptions.Count)])
                        .Build();

            var apps = Builder<App>.CreateListOfSize(10)
                        .All()
                        .Have(a => a.ID = Guid.NewGuid())
                        .Do(e => e.Events.AddRange(Pick<Event>.UniqueRandomList(2).From(events)))
                        .Do(c => c.LastSeenCountry = countries[random.Next(0, countries.Count)])
                        .Build();

En el ejemplo anterior estoy creando por un lado eventos y por otro aplicaciones. Antes de comenzar con la creación, instancio una serie de valores que quiero utilizar a posteriori, como son las descripciones y los países. En el primer ejemplo, creo diez eventos donde señalo que la descripción debe ser una de las anteriormente definidas, elegida de manera aleatoria. En el caso de las apps, se crean otros diez utilizando Guid.NewGuid() para el ID de cada uno de los elementos, selecciono dos eventos de los creados anteriormente para la propiedad Events y, por último, elijo de manera aleatoria uno de los países almacenados en countries.

Espero que sea de utilidad.

¡Saludos!