Question

J'essaie d'effectuer 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 lors du test. AutoRollback utilise TransactionScope pour démarrer une transaction avant le test, puis l'annuler.

Lorsque j'essaie de lancer une application Web pendant une transaction, elle 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"));
}
Était-ce utile?

La solution

Votre application ASP.NET a un contexte de base de données distinct et elle n'a aucune idée de son intention de rejoindre la transaction lancée par Xunit.net. Apparemment, la base de données verrouille certaines ressources au démarrage de la transaction. L’application Web attend patiemment pendant un certain temps et finit par abandonner.

Je pense que votre meilleur choix est de partir d'une base de données vide et d'utiliser un script SQL pour créer un schéma et remplir des tables de recherche (votre base de données est sous contrôle de code source , n'est-ce pas?). Une autre approche consiste à sauvegarder la base de données avant d'exécuter les tests, puis à la restaurer une fois qu'ils sont terminés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top