Ich bin auf der Suche nach einer schnellen Möglichkeit, meine Tabellen Daten zu reinigen, die Integration Tests mit EF.Nachteil der Verwendung der Transaktion dispose mit Entity Framework Integrationstest
Jeder scheint eine Transaktion um seine Testmethode zu wickeln und die Transaktion nach dem Test zu entsorgen.
Auf diese Weise werden die Daten nie in die Tabelle geschrieben.
Dinge wie neue Auto IDs für Inserts funktionieren noch, aber ich frage mich, ob diese Methode wirklich zuverlässig ist im Vergleich zu .commit() der Transaktion.
Gibt es irgendwelche Nachteile diesen Ansatz zu verwenden, die nicht scheint, ein echten Integrationstest zu sein, wie die Datenbank nie berührt wird ...
Oder mit anderen Worten geben es fehlerhafte Szenarien gefragt, die als Ausnahmen nicht Pop mit die Transaktion ohne commit()?
UPDATE
public abstract class IntegrationTestsBase
{
protected TransactionScope TransactionScope;
public abstract void TestSetup();
protected void InitTestSetupOnTable(string tableName)
{
TransactionScope = new TransactionScope();
using (var context = new TGBContext())
{
var cmdCommand = string.Format("DBCC CHECKIDENT ({0}, RESEED, 1)", tableName);
context.Database.ExecuteSqlCommand(cmdCommand);
context.SaveChanges();
}
}
[TestCleanup]
public void TestCleanup()
{
TransactionScope.Dispose();
}
}
[TestClass]
public class MyTests : IntegrationTestsBase
{
[TestInitialize]
public override void TestSetup()
{
base.InitTestSetupOnTable("MyTableName");
}
}
Der einzige wirkliche Unterschied ist, dass Sie die Nebenläufigkeit nicht testen. Wenn Sie also brauchen (und Sie werden brauchen!), Werden Sie den Beginn Transaktion/Rollback-Ansatz ändern. Auch eine Sicherung wiederherstellen und eine Datenbank löschen sind einige Zeile von Codes am Anfang/Ende des Tests. – bubi
@bubi Wiederherstellung einer Datenbank ist schneller als context.datebase.Create()? – Elisabeth
Wenn Sie Tests mit einer leeren Datenbank starten können, können Sie auch Create() verwenden. Ich weiß nicht, ob es schneller ist, hängt wahrscheinlich von der Anzahl der Tabellen/Felder/Beziehungen/DBMS ab ... Es könnte auch sein, dass einige EF Provider Create() nicht unterstützen. In meinem Fall verwende ich Microsoft Access, um EF zu testen, und der Anbieter unterstützt CodeFirst-Migrationen, unterstützt aber nicht Create() – bubi