Another .NET Blog

To content | To menu | To search

Tuesday 6 April 2010

Aide à l'injection de dépendances pour Ninject grâce à une interface "fluent"

Je vais aujourd'hui vous présenter le résultat d'un refactoring de masse dans une série de tests unitaires, qui a permis d'accroitre très fortement la lecture des tests, et surtout leur compréhension.

La classe testée a pour but de gérer les mises à jour d'une liste de programmes installés sur un ordinateur. Cette classe est très "high-level" dans la mesure où elle permet d'aller récupérer la liste de toutes les mises à jour de toute une gamme de produits, de savoir pour chaque programme quelles sont les mises à jour à installer, puis bien évidemment de télécharger ces mises à jour et les installer.

Comme vous le voyez, cette classe consiste en beaucoup de sous-tâches, qui vont toutes communiquer avec le monde extérieur (internet notamment, pour l'obtention des mises à jours et leur téléchargement). Dans le but d'obtenir des tests unitaires les plus isolés possibles, j'en suis bien sûr arrivé à décomposer chacune de ces sous-tâches et à les identifier par des interfaces bien distinctes, pour lesquelles je laisse à Ninject le soin de les injecter comme il faut.

Rien que du très classique en somme. Le hic étant que cette classe nécessite du coup l'injection de beaucoup de dépendances (5 !) et que la mise en place des mocks dans chaque test rend le test trop long, et sa relecture difficile.

Voici donc une solution pour éviter ce genre de soucis. Solution qui se base, comme vous allez le constater, sur une hiérarchie de Providers Ninject, et une classe de construction d'un Module, qu'on rendra "Fluent".

Continue reading...

Wednesday 30 July 2008

Utiliser des mock objects pour émuler une couche de persistance (Correctif)

J'avais donné dans mon article précédent un lien expliquant comment utiliser plusieurs Expect pour une même fonction.

Il se trouve que j'aurais dû être plus consciencieux dans mon article, puisqu'un test unitaire se devait vraiment d'utiliser cette fonctionnalité très puissante de Moq.

En voici la preuve...

Continue reading...

Utiliser des mock objects pour émuler une couche de persistance

Après une semaine de vacances bien méritées, j'ai eu l'idée de cet article, qui va (tenter d')expliquer comment utiliser des objets simulacres (mock objects) pour émuler une couche de persistance aux données lors de tests unitaires.

Ce "tutorial" s'appuie sur du code que je suis en train de développer pour la réalisation d'un programme de gestion de connexions en Remote Desktop, et utilise xUnit et Moq.

C'est un tuto qui est assez "expérimental" pour moi puisque je me considère comme étant en phase d'apprentissage sur les notions de couches, mais aussi en TDD et Mock Objects. J'implore donc votre clémence pour ne pas trop me fustiger. J'ai aussi écrit cet article pour me permettre de mettre en forme mes idées, et aussi et surtout pour avoir des retours, afin d'améliorer la "chose".

Mais trêve de blablas, la suite après le saut...

Continue reading...