Question

J'ai quelques classes du référentiel qui sont destinés à parler à différents types de données, provenant d'une interface IRepository.

Dans les réalisations, les pourparlers de code à une source de données, soit ce répertoire un des fichiers XML ou une base de données ou même juste un cache. Est-il possible de manière fiable test unitaire l'une de ces mises en œuvre? Je ne vois pas un travail de mise en œuvre simulée, car alors je teste uniquement le code simulé et non le code réel.

Était-ce utile?

La solution

Non, vous utiliseriez une maquette lorsque vous écrivez une classe utilise un IRepository. Pour les implémentations de IRepository, vous auriez besoin de tester sur la source de données appropriée. Pour les bases de données, qui est un peu une douleur -. Pour un système de fichiers, un peu moins

Lorsque cela est possible, si vous pouvez exprimer votre mise en œuvre en termes de flux ou lecteurs, vous vous rendre la vie plus facile: les tests pour les parties de la mise en œuvre peuvent aller à l'encontre des sources de données, ou des flux en mémoire des ressources dans l'ensemble essai . Bien sûr, vous aurez probablement besoin certains tests qui vont à une véritable base de données ou le système de fichiers, mais il faut espérer moins.

Que vous appelleriez ces essais tests « unitaires » est ou non une question de la façon dont vous définissez les tests unitaires; Personnellement, je ne me soucie pas trop sur les noms impliqués, mais je faire soins d'avoir des tests. Pour les bases de données en particulier, ceux-ci peuvent être un peu douloureux (surtout si vous voulez être en mesure d'exécuter des tests en parallèle) -. Mais ils peuvent aussi être extrêmement précieux, dans mon expérience

Autres conseils

Je pense que si vous testez le code qui en fait persiste ou des données de requêtes, vous voulez probablement fait de frapper une base de données.

Ce sont des tests d'intégration plutôt que des tests unitaires.

Vous pouvez configurer une base de données de test, dans lequel vous connaissez l'état des données et exécuter les tests contre cela. Vous voulez probablement aussi dire aux tests qu'ils sont différents de vos tests unitaires et ne doivent pas nécessairement être exécuté sur chaque chèque (en nUnit vous pouvez décorer votre classe de test avec un attribut lui disant de ne pas courir)

D'une manière générale, vous ne unité tester tout code dont le seul but est de parler à une source de données. Vous pouvez toujours voulez tester automatiquement le référentiel, mais un tel test sera un test d'intégration par définition. Vous ne voulez probablement pas exécuter ces tests dans le cadre de votre « premier passage » construit comme par exemple la mise en place de la base de données et le nettoyage après vous peut prendre une quantité non négligeable de temps.

Si votre dépôt a d'autres responsabilités (par exemple la mise en œuvre du modèle unité de travail), alors vous voudrez peut-être à l'unité les tests séparément.

À un certain moment dans la mise en œuvre du IRepository vous utiliserez une API tiers qui en fait lire / écrire / base de données / fichier / xml. Ce que vous voulez faire est de se moquer de ces API pour vous assurer que votre code appelle le droit API dans l'ordre.

Donc, si vous lisez de la base de données, vous pouvez railler SqlConnection et SqlCommand et assurez-vous que vous appelez les bonnes méthodes sur ces classes. Si vous écrivez à un flux, vous pouvez railler le flux et assurez-vous que vous chassez et la jeter (par exemple).

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