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"));
}
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top