2009-06-16 2 views
6

J'essaie de faire des tests web automatisés de mon application ASP.NET. J'espérais utiliser l'attribut AutoRollback des extensions Xunit.net pour annuler les modifications apportées à la base de données pendant le test. AutoRollback utilise TransactionScope pour démarrer une transaction avant le test et la restaurer ensuite.Le rollback TransactionScope peut-il être utilisé avec du sélénium ou du watin?

Lorsque j'essaie de toucher mon application Web lors d'une transaction, le délai expire toujours. Il semble que cela devrait fonctionner, des idées? Voici mon 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")); 
} 

Répondre

5

Votre application ASP.NET a un contexte de base de données séparée et il n'a aucune idée que vous voulez qu'il se joindre à la transaction a commencé par Xunit.net. Apparemment, la base de données verrouille certaines ressources lorsque la transaction commence; L'application Web attend patiemment un certain temps et finit par abandonner.

Je pense que votre meilleur pari est de commencer à partir de la base de données vide et d'utiliser le script SQL pour créer des schémas et remplir des tables de recherche (votre base de données est under source control, non?). Une autre approche consiste à sauvegarder la base de données avant d'exécuter les tests, puis à les restaurer une fois qu'ils ont terminé.

+0

Vous savez, cela semble si évident maintenant que vous l'avez dit :) J'espérais éviter d'accumuler et de démolir la base de données tout le temps, mais je suppose que je suis coincé avec elle. –

+0

Vous devez trouver un moyen d'activer la prise en charge des transactions dans LINQ to SQL afin qu'il puisse se joindre à la portée de transaction existante. –

Questions connexes