2009-09-11 5 views
8

Quello che mi piacerebbe fare è creare una classe con alcuni attributi su diverse proprietà, passare quella classe ad un altro che impostare le proprietà con dati casuali appropriata ... qui in pseudo-codice:Esistono strumenti per popolare le proprietà di classe con dati casuali?

public class Customer 
{ 
    [Attribute("FirstName")] 
    private string CustomerFirstName; 
    public {get;set} //etc 

    [Attribute("LastName")] 
    private string CustomerLastName; 
    public {get;set;} //etc 

    [Attribute("DateTime")] 
    private DateTime CustomerSignUpDate; 
    public DateTime {get;set;} //yadda 

    [Attribute("Phone")] 
    private string CustomerPhone; 
    public string {get;set;} //yadda 
} 

E quindi fai come questo

IList<Customer> CustomerList=ClassFillerOutClass(new Customer(),5); 

E il risultato sarebbe un elenco di 5 clienti che hanno dati "casuali" appropriati nelle loro proprietà.

Se questo non esiste ... Credo che potrei iniziare un progetto da solo ... Non voglio reinventare la ruota se non è necessario.

EDIT: Ho dimenticato un pezzo. Sto cercando di usarlo come strumento di test. Quindi nell'esempio sopra ho potuto creare rapidamente un elenco di 5 clienti con valori casuali ma appropriati. E poi dica che passa al mio metodo di persistenza e ho qualcosa su cui posso controllare. Sto cercando di evitare di creare manualmente un oggetto popolato ogni volta per i miei scopi TDD.

EDIT 2: Ok, quindi ho iniziato a girare il mio ... lo posterò su Codeplex questo fine settimana e lo collegherò qui ... chiaramente non lo farò ma sarà un inizio se qualcun altro vuole lavorarci sopra.

risposta

8

Ok ... quindi non l'ho mai trovato .... quindi ho deciso di iniziare da solo. Partenza: Object Hydrator.

Il progetto è attualmente un picco rapido ... ma penso che abbia un potenziale ... fammi sapere se hai idee su come migliorarlo.

+1

Si sente in errore ad accettare la mia risposta ... ma Object Hydrator sembra essere una buona soluzione finora. – Webjedi

+1

Progetto molto interessante lì. Gestisci la creazione di collecitons/liste/array/dizionari interni e le proprietà con accessors 'get' only? – julealgon

+0

Possiamo gestire gli elenchi interni, non gli array oi dizionari. Non ho provato i getter solo in realtà. – Webjedi

0

Non conosco i tuoi obiettivi qui, ma terrò questo vicino al livello di codice. Questo approccio potrebbe non funzionare per te, ma in passato ha avuto per me.

È possibile generare dati casuali e inserirli nel proprio database. Ci sono alcuni prodotti commerciali a costo che lo fanno. Quello che uso è SQL Data Generator di RedGate.

Con questi dati alla mano, si possono fare alcune manipolazioni di testo in SQL per convertire i dati colonnare:

Table Customer 
FirstName | LastName | SignUpDate | Phone 
Bob   Smith  1/2/2009  555-555-1212 
Jane  Doe  9/11/2009 555-300-1334 
... 

Into:

new Customer() 
{ 
    CustomerFirstName = "Bob", 
    CustomerLastName = "Smith", 
    CustomerSignUpDate = DateTime.Parse("1/2/2009"), 
    Phone = "555-555-1212" 
}, 
new Customer() 
{ 
    CustomerFirstName = "Jane", 
    CustomerLastName = "Doe", 
    CustomerSignUpDate = DateTime.Parse("9/11/2009"), 
    Phone = "555-300-1334 
}, 

e avvolgere questo in quanto segue usando un editor di testo (questa è la sintassi C# 3.0):

public class FakeCustomerRepository 
{ 
    private IList<Customer> m_Customers = new List<Customer>() 
       { 
        [insert SQL text transform here] 
       }; 

    public Customer Get(...) 
    { 
    return m_Customers.Find(...); 
    } 
} 

Ancora, non conosco le vostre esigenze e se avete bisogno dati casuali in fase di esecuzione. L'approccio sopra descritto è utile solo se vuoi generare molti dati rapidamente e staticamente.

+0

Non ero abbastanza chiaro ... Ho aggiunto alla domanda. – Webjedi

+0

Beh, mi spiace dirti che non sono a conoscenza di un randomizzatore di dati di classe runtime personalizzabile, che è quello che ritengo tu stia chiedendo. –

1

Al giorno d'oggi si ha anche NBuilder (nbuilder.org) che fa lo stesso.

Non so se entrambi i progetti sono collegati.

4

Ho provato AutoFixture (http://autofixture.codeplex.com/) e ha funzionato bene per me. Sono stato in grado di generare un oggetto con una gerarchia di figli profonda in una riga di codice.

-1

è possibile utilizzare Hydrator oggetto in C#

URL http://objecthydrator.codeplex.com/

e utilizzare come

public Employee GetEmployee() 
{ 
    return new Hydrator<Employee>().GetSingle(); 
} 

public IList< Employee> GetEmployees() 
{ 
return new Hydrator<Employee>().GetList(100); 
} 

Anand Più

+5

Dai un'occhiata alla risposta accettata. Ho scritto ObjectHydrator dopo non aver trovato nulla. :) – Webjedi

0

Tutte le cariche degli oggetti proposti non funzionano per i miei oggetti complessi .

Ho oggetti nidificati super complessi con array con matrici annidate e questo è a metà strada per me. http://hydrator.codeplex.com/

Compilavo tutto tranne gli array.