2009-06-16 20 views
6

Sto provando a eseguire alcuni test web automatizzati della mia applicazione ASP.NET. Speravo di utilizzare l'attributo AutoRollback dalle estensioni Xunit.net per annullare le modifiche al database apportate durante il test. AutoRollback utilizza TransactionScope per avviare una transazione prima del test e ripristinarla in seguito.È possibile utilizzare il rollback TransactionScope con selenio o Watin?

Quando si tenta di eseguire la mia applicazione Web durante una transazione, è sempre scaduto. Sembra che questo dovrebbe funzionare, qualche idea? Qui è la mia prova:

[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")); 
} 

risposta

5

L'applicazione ASP.NET ha un contesto database separato e non ha idea che si vuole unire transazione avviata da Xunit.net. Apparentemente, il database blocca alcune risorse all'avvio della transazione; l'applicazione web attende pazientemente per un po 'di tempo e alla fine si arrende.

Penso che la soluzione migliore sia iniziare dal database vuoto e utilizzare lo script SQL per creare schemi e popolare tabelle di ricerca (il tuo database è under source control, giusto?). Un altro approccio è quello di eseguire il backup del database prima di eseguire i test e quindi ripristinarlo una volta terminato.

+0

Sapete, sembra così ovvio ora che lo avete detto :) Speravo di evitare di costruire e abbattere il database tutto il tempo, ma credo di essere bloccato con esso. –

+0

È necessario trovare un modo per abilitare il supporto delle transazioni in LINQ a SQL in modo che possa partecipare all'ambito della transazione esistente. –

Problemi correlati