Question

Je travaille sur un environnement de test pour un projet et je cherche à utiliser DbUnit.NET pour effectuer une grande partie des tests d'interaction de base de données. J'ai cependant une très grande question:

Nous travaillons contre Oracle et la configuration d’une instance de base de données de test distincte pour chaque développeur n’est vraiment pas faisable (d’autant plus que nous n’avons qu’un seul DBA qui est déjà à court de temps). Cela signifie que tous les développeurs et le serveur d'intégration continue doivent tous utiliser le même schéma de base de données.

Alors, passons à la question: existe-t-il un bon moyen d’empêcher plus d’une personne de faire des tests en même temps? Il serait facile de placer un enregistrement dans une table de base de données indiquant qu'un test est en cours d'exécution, puis de le supprimer une fois les tests terminés, mais NUnit n'a aucun moyen d'exécuter quelque chose au début et à la fin de la session de test.

D'autres pensées? Cela semble être un problème assez courant ... ou est-ce que tout le monde exécute des instances de base de données distinctes pour chaque développeur / testeur susceptible d'exécuter les tests?

Était-ce utile?

La solution

Nous avons utilisé une table factice avec un seul enregistrement comme jeton de verrouillage lorsque nous avons exécuté des tests de base de données pour un groupe de développeurs sur une base de données partagée. Nous avons en fait acquis le verrou pour chaque scénario de test individuellement afin qu'un développeur qui souhaite exécuter un scénario de test n'ait pas à attendre qu'un autre développeur exécutant la suite complète ait terminé. Nous avons fait en sorte que chaque test établisse ses propres données - pas de transfert entre les méthodes de test.

Nous avons utilisé le mécanisme de verrouillage de la base de données pour mettre en file d'attente les tests au lieu d'échouer si quelqu'un d'autre exécutait déjà un test. Je pense que l'algorithme de verrouillage d'Oracle est un peu différent, donc je ne sais pas comment cela fonctionnerait.

Le seul endroit qui nous a posé problème, c'est qu'un développeur souhaitait effectuer un test en mode débogage. Cela bloquerait tous les autres développeurs souhaitant exécuter un test jusqu'à ce qu'il libère le débogueur. Nous avons écrit le nom de l'utilisateur actuel dans une table factice et fait en sorte que le mécanisme de verrouillage imprime un message s'il était bloqué pendant plus de 30 secondes: "Bob exécute actuellement un test depuis 5 minutes."

C’était correct, mais c’était beaucoup de travail à maintenir. Nous avons essayé de limiter le nombre de tests de base de données et d'effectuer la plupart de nos tests sous forme de tests unitaires purs en mémoire.

Autres conseils

Vous pouvez utiliser l'attribut [TestFixtureSetUp] pour injecter l'indicateur indiquant que les tests sont en cours d'exécution afin de simuler un "true". sémaphore.

Quelque chose que j'ai fait dans un problème avec certaines similitudes avec celui-ci:

Le programme avait une variable de configuration qui a été ajoutée à l'avant de tous les éléments pertinents. Chaque station a son propre réglage, correctement réglé, il n’y aurait pas de conflit.

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