Il rollback TransactionScope può essere utilizzato con Selenium o Watin?
Domanda
Sto cercando di eseguire alcuni test Web automatizzati della mia applicazione ASP.NET. Speravo di usare l'attributo AutoRollback dalle estensioni di Xunit.net per annullare tutte le modifiche al database che sono state apportate durante il test. AutoRollback utilizza TransactionScope per avviare una transazione prima del test e ripristinarla successivamente.
Quando provo a colpire la mia applicazione web durante una transazione, scade sempre. Sembra che dovrebbe funzionare, qualche idea? Ecco il mio test:
[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"));
}
Soluzione
La tua applicazione ASP.NET ha un contesto di database separato e non ha idea di voler unire la transazione avviata da Xunit.net. Apparentemente, il database blocca alcune risorse all'avvio della transazione; l'applicazione Web attende pazientemente qualche tempo e alla fine si arrende.
Penso che la soluzione migliore sia partire da un database vuoto e usare lo script SQL per creare schemi e popolare tabelle di ricerca (il tuo database è sotto controllo del codice sorgente , giusto?). Un altro approccio è il backup del database prima di eseguire i test e quindi ripristinarlo al termine.