Perché voglio testare il mio codice unitario ho implementato il pattern di repository nella mia applicazione MVC4. Sono riuscito a creare un'interfaccia di contesto, un finto contesto e utilizzare un'implementazione fittizia di System.Data.Entity.DbSet
seguendo il codice this.Come simulare il metodo DbContext.Entry in Entity Framework con pattern di repository
Purtroppo, proprio come due poster prima di me (here e here), non riesco a prendere in giro il DbContext.Entry method
. Io uso questo metodo per l'aggiornamento voci del database nel mio codice come segue:
DbContext.Entry(order).State = EntityState.Modified;
non ho trovato una soluzione a questo problema, solo le persone che dicono cose come:
"e qual è il punto di unità testare questo codice? Si falsi il metodo Trova , quindi si falsi DbEntityEntry e non ci sarà alcuna logica reale per il test ".
o per
leggere this e tutte le questioni legate prima di continuare. (...) Se vuoi testare i tuoi repository, crea test di integrazione parlando con il vero database.
Questo è tutto buono e buono, ma ancora nessuna risposta alla domanda. Ho letto la critica e desidero ancora questo metodo di inserimento, in modo da poter utilizzare un contesto falso e utilizzare oggetti fittizi nel mio test di unità. Naturalmente userò anche i test di integrazione, ma non sono così veloci come alcuni test rapidi delle unità.
L'errore che ricevo quando provo alcune implementazioni è che Error 2 'Project.Models.Order' does not contain a definition for 'State' and no extension method 'State' accepting a first argument of type '[whatever return type I use]' could be found (are you missing a using directive or an assembly reference?)
Spero che qualcuno possa aiutarmi a fare un metodo DbContext.Entry falso.
Utilizzare un motivo repository in cui gli archivi implementano un'interfaccia generica accoppiato all'unità di modello di lavoro. In questo modo, hai solo bisogno di deridere o fingere l'unità di lavoro. – Maess
Ho visto il primo dei due post SO a cui ti sei collegato e c'è una risposta che è stata ignorata. Ma potrebbe essere completamente irrilevante per il tuo problema. Si prega di inviare * il * codice in modo da poter fornire una buona risposta. –
@KeithPayne c'è una risposta? –