C# – Cómo generar datos aleatorios para realizar pruebas
August 19th, 2012 by JuanK
En ocasiones necesitamos un conjunto de datos para generar pruebas pero no siempre tenemos tiempo o infraestructura para obtener esos datos de una base de datos previamente creada.
Utilizando algo de linq e ingenio podemos crear un conjunto de datos aleatorios que nos permitan realizar pruebas de manera rápida.
En este ejemplo crearemos una lista de personas, el objeto personas es este:
public class Persona
{
public string Nombre { get; set; }
public string Apellido { get; set; }
public int Cedula { get; set; }
public string Profesion { get; set; }
}
Ahora crearemos nuestro DataSource, inicialmente bastará con una pequeña lista de apenas 10 personas.
public class DataSourcePersonas
{
public List<Persona> ListaPersonas{ get; set; }
public DataSourcePersonas()
{
var listaPivote = new ObservableCollection<Persona>()
{
new Persona(){ Profesion="Ingeniero",Apellido="Ruiz Pacheco",Nombre="Juan Carlos"},
new Persona(){ Profesion="Médico", Apellido="Montoya", Nombre="Leidy Paola"},
new Persona(){ Profesion="Analista", Apellido="Gates", Nombre="Bill"},
new Persona(){ Profesion="Enfermero",Apellido="Jobs", Nombre="Steve"},
new Persona(){ Profesion="Conductor",Apellido="Torvalds", Nombre="Linus"},
new Persona(){ Profesion="Piloto", Apellido="Cruise", Nombre="Tom"},
new Persona(){ Profesion="Capitán", Apellido="Cat", Nombre="Tom"},
new Persona(){ Profesion="Biólogo", Apellido="Master", Nombre="Osho"},
new Persona(){ Profesion="Físico", Apellido="Eye", Nombre="Golden"},
new Persona(){ Profesion="Astrónomo",Apellido="Telecom", Nombre="Telefonica"}
};
}
}
Con esto será suficiente, ahora es tiempo para la magia.
Utilizando Linq haremos simplemente un producto cartesiano, consultaremos listaPivote haciendo join consigo misma, para producir una combinatoria de Personas, suena complicado? realmente es muy fácil, mira:
public class DataSourcePersonas
{
public List<Persona> ListaPersonas{ get; set; }
public DataSourcePersonas()
{
var listaPivote = new ObservableCollection<Persona>()
{
new Persona(){ Profesion="Ingeniero",Apellido="Ruiz Pacheco",Nombre="Juan Carlos"},
new Persona(){ Profesion="Médico", Apellido="Montoya", Nombre="Leidy Paola"},
new Persona(){ Profesion="Analista", Apellido="Gates", Nombre="Bill"},
new Persona(){ Profesion="Enfermero",Apellido="Jobs", Nombre="Steve"},
new Persona(){ Profesion="Conductor",Apellido="Torvalds", Nombre="Linus"},
new Persona(){ Profesion="Piloto", Apellido="Cruise", Nombre="Tom"},
new Persona(){ Profesion="Capitán", Apellido="Cat", Nombre="Tom"},
new Persona(){ Profesion="Biólogo", Apellido="Master", Nombre="Osho"},
new Persona(){ Profesion="Físico", Apellido="Eye", Nombre="Golden"},
new Persona(){ Profesion="Astrónomo",Apellido="Telecom", Nombre="Telefonica"}
};
Random genCedula = new Random();
var listaFull = from persona in listaPivote
from persona2 in listaPivote
from persona3 in listaPivote
select new Persona(){ Cedula = (int)(genCedula.NextDouble() * 999999999),
Nombre=persona.Nombre,
Apellido=persona2.Apellido,
Profesion=persona3.Profesion };
ListaPersonas = new List<Persona>(listaFull);
}
}
esto nos ha generado una lista de 1000 registro partiendo tan solo 10, una parte del truco es hacer join múltiple y la otra es la clausula select, fijate que allí creamos nuevos objetos de tipo Persona pero en su creación replicamos nombre, apellido y profesión cada uno de una lista de personas diferente! (realmente es la misma pero de otra parte del join).
Hasta allí ya esta hecho todo el trabajo, para darle un poco de mayor diversidad a los datos el atributo Cedula lo he inicializado con un valor aleatorio entre 0 y 999999999 .
Gracias a esta combinación podemos generar automáticamente registros como estos:
Profesion="Enfermero",Apellido="Ruiz Pacheco" Nombre="Tom" Profesion="Conductor",Apellido="Montoya", Nombre="Tom" Profesion="Piloto", Apellido="Gates", Nombre="Osho" Profesion="Capitán", Apellido="Jobs", Nombre="Golden" Profesion="Biólogo", Apellido="Torvalds", Nombre="Telefonica"
Eso es todo!
- 4 Comentarios »
- Publicado en la categoría 'C#'

Wordpress
4 comentarios to “C# – Cómo generar datos aleatorios para realizar pruebas ”
August 19th, 2012 at 4:06 pm
[...] Los primero es que debes tener ya establecido un conjunto de datos, ¿necesitas datos de prueba? “C# – Cómo generar datos aleatorios para realizar pruebas”. [...]
August 19th, 2012 at 5:15 pm
Tengo una duda, recién estoy empezando a manejar el ObservableCollection, y me di cuenta que al momento de instanciarla la dejaste como var, cual es el objetivo de eso.?
Gracias.
August 19th, 2012 at 5:16 pm
El único objetivo es hacer el código mas legible, debido a que C# soporta inferencia de tipos, el sabe el tipo correcto de la variable, el compilador lo deduce al revisar lo que viene después del new.
August 20th, 2012 at 12:31 pm
[...] Para poder revisar estos temas lo primero que necesitamos es definir un origen de datos, utilizaremos una List de Persona como datos de prueba. Necesitas datos de prueba? C# – Cómo generar datos aleatorios para realizar pruebas [...]