1

J'ai quelques problèmes en essayant de créer des tests d'intégration avec Selenium et NUnit. J'essaie d'utiliser Selenium RC dans le test NUnit pour piloter mon application web ASP.NET, et je voudrais que les tests fassent tout ce que l'utilisateur réel ferait. Naturellement, ce serait bien si la base de données pouvait être annulée après que Selenium l'ait fait, et j'ai affirmé que db contient les nouvelles lignes (etc) avec les données de l'interface utilisateur.Tests d'intégration utilisant Selenium et NUnit - De l'interface utilisateur à la base de données

Alors, voici la configuration que j'ai (dans une sorte de pseudo-code):

TestMethod() 
{ 
    Using(new TransActionScope) 
    { 
     Selenium.StartSelenium() 
     Selenium.SelectAndClickAndDoStuffInUI() 
     AssertSomething() 
    } 
} 

Maintenant, la SelectAndClickAndDoStuffInUI méthode clique autour de l'interface utilisateur et donc des incendies notre da-cadre exclusif. Notre framework écrit tout le contenu dans db, et la méthode AssertSomething affirme que tout va bien dans db. Framework utilise les transactions ("required") dans son fonctionnement interne.

Alors tout va bien, non? Non, malheureusement pas. Le TransActionScope dans l'exemple ci-dessus ne devrait pas être validé (pas de txScope.Complete() - appel là), et ainsi toutes les transactions internes devraient être annulées aussi, non? Eh bien, ils ne le font pas, et tout ce que Selenium fait par le biais de l'interface utilisateur s'engage à DB.

J'ai vraiment essayé de comprendre où cela ne va pas, mais jusqu'à présent, je n'ai pas trouvé la réponse.

Merci pour la lecture, et (enfin) voici la vraie question:

Pourquoi TransactionScope ne se retourne pas roulé dans le cas représenté dans mon exemple?

Je me ferai un plaisir de fournir des informations supplémentaires sur la situation et la configuration!

Répondre

3

Vous utilisez une interface utilisateur pour une application ASP. Cela signifie que votre test n'est pas en mesure d'annuler les modifications que vous avez apportées.

La portée de la transaction ne peut fonctionner que dans votre propre processus. Comment le gestionnaire de transactions peut-il annuler le clic dans une interface Web? Ça pourrait être n'importe où. Selenium est juste de contrôler à distance un navigateur.

Vous devez créer vos "vrais" tests unitaires avec des objets fantaisie, et ne pas accéder à la base de données du tout. C'est un peu dur avec une page asp normale, mais vous ne pouvez pas jeter un oeil à asp.MVC pour trouver une solution possible à ce problème.

+0

Merci! Cela l'a expliqué. Tout à fait évident quand on y pense :-) Le test que j'essaie de créer ne peut pas s'appuyer sur des objets fictifs, car je voudrais affirmer l'état de la base de données après les interactions de l'utilisateur. Je vais écrire une nouvelle question plus générale à ce sujet ... – juarola