2017-05-16 1 views
0

Ich verwende Entity Framework Core 2.0-preview1 mit InMemory 2.0-preview1. Jede Unit-Testklasse erbt eine Disposable-Klasse, die eine neue In-Memory-Datenbank erstellt, die ihre Eltern verwenden können.Der UseInMemoryDatabase-Kontext wird nicht für Unit-Tests freigegeben.

public Constructor() 
    { 
     var services = new ServiceCollection(); 

     services.AddEntityFrameworkInMemoryDatabase() 
      .AddDbContext<DBContext>(o => o.UseInMemoryDatabase("Test")); 

     var serviceProvider = services.BuildServiceProvider(); 

     Context = serviceProvider.GetRequiredService<DBContext>(); 
    } 

Das Problem mit der Datenbank geben Sie einen Namen, dass es nicht über mehrere Tests gemeinsam genutzt werden kann und somit schafft jeden Test einen neuen Kontext in jeder Einheit Test resultierende ein paar Sekunden lang, die für meinen Build-Server nicht akzeptabel ist. Ich kann nicht viel Dokumentation darüber finden, warum dies in 2.0 geändert wurde oder wie man darüber hinwegkommt. Ich habe versucht, mit dem neuen .UseTransientInMemoryDatabase, aber dies scheint nichts zu ändern. Danke im Voraus.

+0

Wenn Sie den gleichen db-Kontext über Komponententests teilen, wie stellen Sie spezifische Voraussetzungen sicher und bestätigen Sie die Nachbedingungen für jeden Test? –

+0

Ich mache ein Tracking für Entitäten, die dem Kontext hinzugefügt wurden, und spüe sie nach jedem Test aus. Dadurch kann ich die Initialisierungszeit der Datenbank pro Anfrage umgehen. –

+0

Haben Sie versucht, einen statischen Konstruktor zu verwenden? –

Antwort

0

Ich habe eine xUnit-Fixture verwendet, um alle meine Test-Instanzen mit dem sicheren Datenbankkontext zu versorgen. Auf diese Weise vermeide ich den Overhead des Context-Creation bei jedem Test, der den Build-Server mit einem großen Abstand beschleunigt.

Verwandte Themen