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 !
Réponses
Trop de publicités?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.
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
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.
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.