Der parallele Unit-Test mit Effort und SQL CE schlägt fehl
Ich bewerte Unit-Tests mit EF6 in Kombination mit
http://effort.codeplex.com/ undSQL CE Server (lokale DB-Datei)http://www.codeproject.com/Articles/460175/Two-strategies-for-testing-Entity-Framework-Effort War eine ganz gute Referenz, aber jetzt stecke ich fest.
Ich habe 2 Testprojekte (eines für Effort und das andere für SQL CE). Wenn ich beide getrennt laufen lasse, ist alles in Ordnung. Wenn Sie mit dem ReSharper-Testläufer beide in einer Reihe ausführen, schlägt das letzte Testprojekt immer fehl. Entweder
System.InvalidOperationException: Das Entity Framework verwendete bereits eine DbConfiguration-Instanz, bevor versucht wurde, einen 'Loaded'-Ereignishandler hinzuzufügen. 'Geladene' Ereignishandler können nur beim Start der Anwendung hinzugefügt werden, bevor das Entity Framework verwendet wird.
oder
System.InvalidOperationException: Die Standardinstanz DbConfiguration wurde von Entity Framework verwendet, bevor versucht wurde, eine Instanz von 'SqlCeConfiguration' festzulegen. Die Instanz 'SqlCeConfiguration' muss beim Anwendungsstart festgelegt werden, bevor Entity Framework-Funktionen verwendet werden können, oder sie muss in registriert sein Die Konfigurationsdatei der Anwendung.
Es ist immer das Gleiche. Der Nachfolger erbt die DbConfiguration-Instanz vom Vorgänger.Wie kann ich beide Testprojekte / Konfigurationen ohne Nebenwirkungen ausführen?
Hier ist meinsDbContext Klasse:
public class DataContext : DbContext
{
public DataContext(string connectionString) : base(connectionString)
{ Configuration.LazyLoadingEnabled = false; }
public DataContext(DbConnection connection) : base(connection, true)
{ Configuration.LazyLoadingEnabled = false; }
}
Das ist die Testvorrichtung mitAnstrengung:
[TestFixtureSetUp]
public void TestFixtureSetup()
{
EffortProviderConfiguration.RegisterProvider();
var connection = DbConnectionFactory.CreateTransient();
var dbContext = new DataContext(connection);
...
}
Das ist die Testvorrichtung mitSQL CE:
[TestFixtureSetUp]
public void TestFixtureSetup()
{
const string filePath = @"LocalDb.sdf";
var connectionString = string.Format("Data Source={0}; Persist Security Info=False;", filePath);
DbConfiguration.SetConfiguration(new SqlCeConfiguration());
var dbContext = new DataContext(connectionString);
dbContext.Database.Create();
...
}
und das meineSqlCeConfiguration:
public class SqlCeConfiguration : DbConfiguration
{
public SqlCeConfiguration()
{
SetProviderServices(SqlCeProviderServices.ProviderInvariantName, SqlCeProviderServices.Instance);
SetDefaultConnectionFactory(new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"));
}
}
Ich danke dir sehr!
Marcel