2009-06-16 4 views
6

Próbuję wykonać kilka automatycznych testów sieciowych mojej aplikacji ASP.NET. Miałem nadzieję użyć atrybutu AutoRollback z rozszerzeń Xunit.net, aby cofnąć wszelkie zmiany w bazie danych wprowadzone podczas testu. AutoRollback używa TransactionScope do rozpoczęcia transakcji przed testem i późniejszego jej wycofania.Czy można wycofywać operacje TransactionScope w przypadku Selenium lub Watin?

Kiedy próbuję trafić moją aplikację internetową podczas transakcji, zawsze przekracza limit czasu. Wygląda na to, że to powinno zadziałać, jakieś pomysły? Oto moja próba:

[Fact] 
[AutoRollback] 
public void Entity_should_be_in_list() 
{ 
    Entity e = new Entity 
    { 
     Name = "Test", 
    }; 
    dataContext.Entities.InsertOnSubmit(e); 
    dataContext.SubmitChanges(); 

    selenium.Open("http://localhost/MyApp"); 
    Assert.True(selenium.IsTextPresent("Test")); 
} 

Odpowiedz

5

Aplikacja ASP.NET ma osobny kontekst bazy danych i nie ma pojęcia, że ​​chcesz go dołączyć do transakcji zapoczątkowaną przez Xunit.net. Najwyraźniej baza danych blokuje niektóre zasoby po rozpoczęciu transakcji; aplikacja internetowa czeka cierpliwie przez jakiś czas i ostatecznie rezygnuje.

Myślę, że najlepiej jest zacząć od pustej bazy danych i użyć skryptu SQL do utworzenia schematu i wypełnienia tabel wyszukiwania (twoja baza danych to under source control, prawda?). Inne podejście polega na wykonaniu kopii zapasowej bazy danych przed uruchomieniem testów, a następnie przywróceniu jej po zakończeniu.

+0

Wiesz, to wydaje się być tak oczywiste teraz, kiedy to powiedziałeś :) Miałem nadzieję, że nie będę cały czas budował i niszczał bazy danych, ale myślę, że utknąłem z tym. –

+0

Musisz znaleźć sposób na włączenie obsługi transakcji w LINQ do SQL, aby mógł on dołączyć do istniejącego zakresu transakcji. –