2013-02-21 15 views
5

Sto creando un test unitario che richiama un metodo di creazione dell'attività. Il metodo task create chiama alcuni oggetti esterni fittati che sono lo scopo del mio test, ma all'interno del mio metodo testato esiste anche una chiamata SaveChanges che salva la mia attività. Quello che sto cercando di fare è di shimare la classe DbContext all'interno di System.Data.Entity in modo che il metodo SaveChanges non acceda più al database.Come Shim DbContext con Microsoft Fakes?

ho aggiunto un gruppo di falso per System.Data.Entity, ma quando uso System.Data.Entity .Fakes si dice "non può risolvere il simbolo 'falsi'", anche se posso accedere System.Data.Fakes (ma io have't aggiunto un assieme falso per System.Data)

Ho simulato altri metodi nel contesto delle mie entità, ma non posso simulare il metodo SaveChanges sulla mia entità poiché il metodo è ereditato da DbContext.

ShimDBEntities.AllInstances.SaveChanges = (x) => { ... }; 

il pezzo superiore del codice dice "non può risolvere 'SaveChanges' simbolo".

Quindi, come posso ridurre DbContext utilizzando Microsoft Fakes?

+1

Io non sono un grande fan di spessori, in particolare sul DbContext. Penso che potresti dover riconsiderare il tuo design per testare meglio il tuo codice. Controlla il post del mio blog su questo argomento: http://sitecore.paragon-inc.com/resources/blogs-posts/the-repo-man – IronMan84

+1

grazie, ma il progetto è già in produzione e il design non è stato pensato per essere testabile quindi stavo cercando di lavorare con quello che ho –

risposta

2

Sono riuscito a farlo creando un metodo SaveChanges nella mia classe BaseRepository e lo uso in tutti i miei repository derivati ​​dove avevo db.SaveChanges.

Poi ho shimed mia BaseRepository in modo che il mio metodo SaveChanges non avrebbe fatto nulla

Problemi correlati