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...

Friday 15 January 2010

Configuration d'un serveur d'intégration continue - [Partie 2] - Tests unitaires

Après avoir vu dans la première partie comment installer Hudson, configurer notre premier job et notre premier fichier NAnt, nous allons maintenant voir comment lancer automatiquement dans le processus de compilation l'exécution de tous les tests unitaires de la solution, bien entendus créés avec le framework de test xUnit.

Continue reading...

Saturday 9 January 2010

VS2010: Nouvelle page de résumé pour le profiler

Vu sur le blog de l'équipe en charge du développement du profiler pour VS2010, les nouveautés concernant la page de résumé du profiling d'une application. A lire ici.

A lire également ici, une sorte d'introduction à comment lancer une séance de profiling grâce au raccourci clavier ALT+F2

Et pour finir, leur tout dernier article explique comment lancer une session de profiling sur une série de tests unitaires.

Bonne lecture!

Tuesday 5 January 2010

VS2010 / xUnit / Resharper : enfin, ça marche!

Bonne nouvelle!

Cela faisait un moment que je tentais désespérément de lancer des tests unitaires sous VS2010 avec xUnit et Resharper 5, sans succès, comme vous vous en doutez. La seule solution avait été de recompiler le GUI de xUnit en .NET 4 et de l'utiliser pour les tests. Ce que je ne trouve pas très pratique, dans la mesure où ça oblige à jongler entre plusieurs applications. C'est toujours plus simple de rester dans son environnement de travail.

Eh bien c'est désormais possible. C'est extrêmement simple, en voici la procédure:

  1. Télécharger et installer la nouvelle version de Resharper 5.0, qui est désormais en Beta.
  2. Télécharger la dernière version de xUnit Contrib
  3. Installer xUnitContrib

Une fois ces 3 étapes faites, lancez VS2010 et ô surprise:

Preview_xUnit_R__VS2010.png

En voilà une bonne nouvelle pour une rentrée de Vacances :)

Monday 21 December 2009

Go go PEX et Code Contracts !!!

Si vous ne connaissez pas PEX ou Code Contracts, bonne nouvelle! Il existe un podcast en français (oui oui!) qui présente très succinctement ces 2 nouveaux outils prévus pour .NET 4.0 qui vous permettront de faciliter vos développements en TDD.

En effet, Code Contracts vous permet de définir dans le corps de vos fonctions des contrats (étonnant non?) qui vont porter sur les valeurs d'entrée et de sortie de vos fonctions. Ça vous permet d'éviter toutes ces séries de tests rébarbatives vérifiant par exemple que ArgumentNullException est bien lancée quand vous passez un null, ou qu'une fonction ne retourne jamais null. De quoi alléger un peu les test.

PEX quant à lui va vous permettre d'automatiser l'appel des fonctions avec des valeurs plus ou moins aléatoires, ce qui va vous permettre de voir dans quelle mesure vos tests unitaires couvrent bien l'intégralité des possibilités d'erreur (ou non) lorsque vous utilisez ces fonctions.

2 nouveaux outils que je trouve vraiment très intéressant et pour lesquels je pense faire prochainement des articles lorsque je commencerai à les utiliser.

Via Coq Blog.

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...

Tuesday 8 July 2008

Présentation d'un framework de Tests: xUnit.net

Ca faisait un petit moment que je n'avais pas blogué un petit article (surtout que je ne fais pas trop de C# en ce moment). Je tente de me rattraper avec un article sur le framework de tests que j'utilise xUnit.net, et qui est une sorte de récapitulatif de ce qu'on trouve sur internet.

Continue reading...