Generar datos de ejemplo a partir de clases y NBuilder en ASP.NET MVC 4

A estas alturas creo que no es muy necesario introducir lo bueno de los datos de ejemplo en las aplicaciones, sobre todo al momento de probar el diseño de las mismas, o hacer todo tipo de pruebas y perrerías que nos podría meter algún usuario en las vistas, aunque normalmente estas deberían estar controladas aunque sea con un if(), idealmente con anotaciones sobre el modelo. Con NBuilder podemos tener datos de ejemplo para nuestras vistas de ASP.NET MVC 4 de una manera ultra-sencilla, generándolos directamente en el Controller. Voy a suponer que ya habréis creado un nuevo proyecto de MVC 4 e instalado NBuilder desde Nuget. Vaya por delante que esta entrada no pretende ser más que una pequeña introducción a una herramienta que me está resultando útil estos días.

Primero que nada, cabe subrayar cómo NBuilder nos genera los datos de prueba, que dependen del tipo de datos que pretendas generar. Por ejemplo, para las strings será algo como string.Format({0}{1},propertyName, i) dentro de un bucle. Es decir, si tenemos un campo “Name” que es una string, los datos que nos generará serán “Name1, Name2,…,NameN”. Para los números es tan sencillo como un i++ desde 1 a N (1,2,3…N). Para las fechas, parte de la actual y le va sumando un día.

Bien, supongamos que tenemos la siguiente entidad (escribiré el código directamente en WordPress, sabrán perdonarme alguna identación):

public class Event
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Venue { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}

Entidad modelo sencillísima donde se podrían hacer mil cosas más, así como optimizaciones agrupando en un objeto varias propiedades…pero eso será ejercicio del lector, vamos al grano de lo que queremos con NBuilder. Ahora, en el controlador, tendremos que importar dos namespaces, el de nuestro modelo y Fizzware.NBuilder. Una vez hecho esto podremos escribir un código parecido a este en nuestro controlador:

public ActionResult Index()
{
    var events = Builder.CreateListOfSize(10).Build();
    return View(events);
}

Asumiendo que la vista la habréis creado con clic derecho en la acción -> crear vista tipada, el trabajo está hecho. Pero dejarlo así es un poco soso, teniendo en cuenta las capacidades de creación de contenido casi como queramos que nos provee NBuilder. Por ejemplo, supongamos que queremos hacer que todos los datos sean iguales. No sé bien por qué, pero supongamoslo:

public ActionResult Index()
{
    var events = Builder.CreateListOfSize(10).All().With(x=>x.Id = 1).And(x=> x.City = "Valencia").And(x=> x.Country = "Spain").And(x=> x.Venue = "L'umbracle").Build();
    return View(events);
}

O mejor aún, algo más elaborado, donde tendremos los primeros N elementos de una forma, los siguientes N de otra, y así sucesivamente:

public ActionResult Index()
{
    var events = Builder.CreateListOfSize(10).All().TheFirst(2).With( x=> x.Id = 1).TheNext(3).With( x=> x.City = "Madrid").TheNext(3).With(x=>x.Country = "USA").TheLast(2).With(x=>x.Venue = "Microsoft").Build();
    return View(events);
}

Por supuesto podéis usar NBuilder en otros proyectos, así como con tipos de datos complejos, pero…ya tenéis la idea 🙂


So, what do you think ?