2016-11-25 14 views
1

Ich teste eine Funktion, die diesen Code enthält:Mocking DbContext Eintrag

void FunctionToTest() { 
    if (context.Entry(entity).State == EntityState.Detached) 
     { 
      // [...] 
     } 

    // [...] 
} 

Aus diesem Grund habe ich meine eigenen Testkontext erstellt, das gut funktioniert, aber ich bin nicht in der Lage DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) zu verspotten, wie die DbEntityEntry Klasse einen Konstruktor das erfordert eine interne Klasse.

Irgendeine Lösung dafür?

+0

Welche Version von EF benutzt du? Wenn Sie EF Core verwenden, können Sie den InMemoryDatabaseProvider verwenden. – Zeus82

+0

http://stackoverflow.com/questions/7609430/how-to-mock-dbcontext – ColinM

Antwort

1

Sie können Effort verwenden. Laden Sie es über NuGet, fügen Sie diesen Code in Ihre app.config

<system.data> 
<DbProviderFactories> 
    <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" /> 
</DbProviderFactories> 
</system.data><entityFramework> 
<providers> 
    <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" /> 
</providers> 
</entityFramework> 

Jetzt in Ihrem Test, den Sie einfach

EffortProviderConfiguration.RegisterProvider(); 
var connection = DbConnectionFactory.CreateTransient(); 
var model = new ApplicationDbContext(connection); 
model.Database.CreateIfNotExists(); 

hinzufügen und voila haben Sie eine gefälschte Datenbank für Testzwecke