3 votes

Comment tester unitairement un comportement dépendant d'une base de données en C# ?

J'ai une application C# qui communique avec la base de données. Je veux tester certaines fonctions qui dépendent de la base de données. Je veux donc m'assurer que la base de données a un état initial avant chaque test. J'utilise NUnit pour tester mon application. Quels sont les moyens disponibles pour restaurer l'état initial de la base de données ?
Merci pour votre aide !

5voto

Steven Points 56939

L'interaction avec la base de données ne fait pas l'objet d'un test unitaire. Ce type de test est appelé test d'intégration. Vous pouvez utiliser vos outils de test habituels (NUnit, MSTest, etc.), mais le mieux est de séparer les tests d'intégration dans un projet distinct, d'utiliser une base de données de test dédiée et d'exécuter ces tests dans le cadre d'une transaction (par exemple, utilisez Champ d'application de la transaction ) que vous annulez. Cela permet de s'assurer que les données ne changent pas et que le comportement de vos tests est prévisible, ce qui est très important.

Si vous le pouvez, essayez de concevoir votre application de manière à ce qu'il soit facile de falsifier toutes les sources externes telles que votre base de données pour vous permettre d'exécuter des tests unitaires (généralement plus rapides). Ce n'est cependant pas facile. Surtout lorsqu'il s'agit d'une application existante qui n'a pas été conçue pour être testable. Dans ce cas, j'ai trouvé que les tests d'intégration étaient une bonne façon de commencer.

3voto

AlexandrYZ Points 321

Vous pouvez utiliser une base de données SQLite en mémoire pour créer un environnement de base de données de test.

SQLite Nunit & Fluent Nhibernate - Testez votre couche d'accès aux données

1voto

Uri Cohen Points 1417

Comme d'autres l'ont dit, vous ne devez PAS dépendre d'une base de données et de sa structure dans les tests unitaires. Je créerais donc une interface qui cache la base de données au composant qui l'utilise (couche d'abstraction de la base de données) et j'implémenterais ensuite une base de données en mémoire pour les besoins des tests unitaires.

Les tables de cette base de données en mémoire peuvent être mises en œuvre à l'aide d'une simple table de hachage C# pour chaque table de la base de données.

Cette séparation a également l'avantage de créer une séparation dans votre code entre la base de données qui peut changer (par exemple, passer de MySQL à Oracle, etc.) et les composants qui l'utilisent.

0voto

zgorawski Points 729

Vous devriez utiliser des programmes de maquettes (plugins) tels que :

Rhino se moque ou moq

Ces programmes peuvent simuler une source de données telle qu'une base de données pendant les tests.

0voto

Ivan Gerken Points 498

Envisagez de passer à MbUnit pour vos l'intégration tests. Il est très pratique Retour en arrière attribuée en fonction de vos besoins.

MbUnit dispose des mêmes attributs que NUnit pour marquer les classes et les méthodes de test. Il vous suffira donc de modifier les directives using et de référencer les dll de MbUnit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X