Poszukuję szybkiego sposobu czyszczenia danych tabel wykonujących testy integracji z EF.Wadą korzystania z transakcji jest pozbywanie się z testowaniem integracji struktury encji
Każdy wydaje się zawijać transakcję wokół swojej metody testowej i pozbywać się transakcji po teście.
W ten sposób dane nigdy nie zostaną zapisane w tabeli.
Rzeczy takie jak nowe automatyczne identyfikatory do wstawek wciąż działają, ale zadaję sobie, że ta metoda jest naprawdę niezawodna w porównaniu do transakcji .commit().
Czy są jakieś wady korzystania z tego podejścia, które nie wydają się być test prawdziwa integracja jako baza danych nie jest dotykany ...
Albo innymi słowy zapytał czy są jakieś błędne scenariusze, które nie pojawiają jako wyjątki używając transakcja bez 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");
}
}
Jedyna różnica polega na tym, że nie testuje się współbieżności. Kiedy będziesz potrzebować (i będziesz potrzebować!), Zmienisz podejście rozpoczęcia/wycofania transakcji. Ponadto przywróć kopię zapasową i upuść bazę danych jest kilka linii kodów na początku/końcu testu. – bubi
@bubi Przywracanie bazy danych jest szybsze niż context.datebase.Create()? – Elisabeth
Jeśli możesz rozpocząć testy z pustą bazą danych, możesz również użyć Create(). Nie wiem, czy to jest szybciej zależy prawdopodobnie od liczby tabel/pól/relacji/DBMS ... Ponadto może być tak, że jakiś dostawca EF nie obsługuje Create(). W moim przypadku używam Microsoft Access, aby przetestować EF, a dostawca obsługuje migracje codefirst, ale nie obsługuje Create() – bubi