2010-11-06 18 views
0

Nous prenons en charge MS SQL Server 2008 (2005 peut-être), Oracle ainsi que Sybase. Il existe un grand script qui utilise AWHILE, qui permet de construire des tables, des procédures stockées, des vues, des triggers, etc., ainsi que de remplir des tables avec ce que nous pensons être des données sensibles.Test des procédures stockées à l'aide de MSTest (.Net)

Maintenant, nous essayons d'introduire des tests unitaires dans le système, pour tester les procédures stockées, principalement, ainsi que les interactions entre eux. Par conséquent, je ne m'attends pas à ce que les instructions en cours d'exécution et les procédures stockées soient particulièrement complexes.

La partie difficile consiste à maintenir un état correct de la base de données avant et après l'exécution du test, même si des exceptions se produisent. Oui, je peux utiliser l'instruction using avec 'IDisposable'. La partie la plus difficile pour moi est (au moins basée sur ce que je fais et ne sais pas encore sur la programmation): comment restaurer en toute sécurité l'état de la base de données MS SQL, Oracle et Syabse des milliers de fois encore et encore? Je ne devrais pas faire l'hypothèse qu'un seul utilisateur l'exerce à tout moment, même si je suis prêt à y réfléchir. J'espère que toutes les 3 bases de données fournissent des mécanismes pour cela, et j'ai seulement besoin de les déclencher en utilisant le bon pilote (Nous avons déjà testé ODBC - cela semble fonctionner pour nous).

S'il vous plaît laissez vos suggestions ainsi que des questions, si vous les avez.

Répondre

2

Il y a quelques solutions à ce problème:

  1. Exécuter les données de base de données script de création après chaque test. Vous avez seulement besoin de créer les données, pas les tables, les procédures stockées et les déclencheurs. Ceux-ci devraient rester statiques lors de vos tests. Si la création de données prend encore trop de temps, cela ne fonctionnera pas.

  2. Isolez les scripts de création de données par table et recréez les données de table nécessaires pour chaque banc de test et exécutez uniquement ces scripts avant chaque test dans cette fonction particulière. Cela accélérerait les choses, mais vous créez toujours l'ensemble de données avant chaque test et pourriez être trop lent à exécuter avant chaque test.

  3. Meilleure option: Envelopper chaque test dans une transaction. J'assume toutes les bases de données que vous avez listées. Simplement, ouvrez une transaction, exécutez votre test, vérifiez les résultats, puis annulez la transaction. L'annulation annulera toutes les modifications de données que vous avez effectuées. Tant que vous utilisez la même connexion pour exécuter la procédure stockée en modifiant les données et pour vérifier les résultats, les modifications doivent être disponibles pour la connexion, mais pas pour la base de données.