Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Azra [Florent Santin]

.Net, X'Net, aucun lien de parenté V2.0

Actualités

  • MSN Alerts
    View Florent Santin's profile on LinkedIn
     Cet été j’en ai rien à coder : le retour
[Teched 2007] Manual and Dynamic Mocks wit C# and Visual Studio Team System

Mark Seemann - Senior Consultat Microsoft Services

Une session consacrée à la création de Mocks, une des techniques avancées de tests unitaires, avec pour les exemples comme utilisation de Framework de test unitaire: MSTest.

Objectif de la session:

- Rappels sur l'intérêt des tests doubles
- Aide au choix de l'outil le plus adapté pour l'utilisation de Mocks

Rappel sur l'importance de la relation fonction à tester <=> dépendances: Dans un test unitaire, il est souhaitable de faire abstraction des dépendances (appels externes) de la fonction à tester. Le but d'un "test double" est de simuler / remplacer une dépendance pour pouvoir cibler uniquement l'unité testée.

Un rappel a aussi été fait sur l'importance de la clarté et de la simplicité des tests unitaires car ceux-ci peuvent servir de documentation pour une API en expliquant par l'exemple le fonctionnement de chaque méthode de celle-ci.

Concernant les tests doubles, il en existe plusieurs types:

•    Dummies, fakes: remplacement d'un objet utilisé dans la méthode à tester par un objet qui ne sera jamais utilisé: juste pour permettre à la méthode de compiler et de s'exécuter
•    Fakes: Remplace une fonctionnalité d'une dépendance par une implémentation différente
•    Spies: permet de vérifier les appels fait a un composant externe en se mettant a sa place et en registrant ceux-ci
•    Stubs: objet utilisé pour remplacer un composant réél et simuler les interactions avec celui-ci
•    Mocks: Remplace un objet utilisé par le code a tester en simulant un comportement identique
•    re-implémentation d'une dépendance complète avec éventuellement simplification

Pour la création de Mocks, il existe deux approches: soit une implémentation complète (manual mock), soit l'utilisation d'un Framework pour le générer automatiquement a l'exécution de l'application (dynamick mock).

Exemple de Dynamick Mock Librairies téléchargeables gratuitement sur internet
- Rhino Mocks: système d'enregistrement, type safe
- NMOck2: string-based.

Exemple d'implémentation avec NMock2:

Mockery mocks = new Mockery();

//création d'un mock pour remplacer l'objet d'accès aux données "IShopDataAccess"
IShopDataAccess dataAccess = mocks.NewMock<IShopDataAccess>();

//spécification du comportement attendu: Dans l'objet DataAccess la méthode  "GetProductPrive" appelée avec l'argument "1234" doit renvoyer "10f".
Expect.Once.On(dataAccess).Method("GetProductPrive").with(1234).Will(Return.Value(10f));

//Appel de l'objet a tester avec le Mock en paramètre
Order o = new Order(dataAccess);
o.Lines.Add(1234).Quantity = 4;
decimal total = o.CalculateTotal();

//on vérifie que le Mock a bien été appelé comme attendu
mocks.VerifyAllExpectationsHaveBeenMet();

Pour aller plus loin:
•     un article de Mark Seemann très complet sur les tests doubles dans MSN Mag: http://msdn.microsoft.com/msdnmag/issues/07/09/MockTesting/default.aspx
•    Le livre xUnit test patteners: Refactoring Test code: http://www.amazon.fr/xUnit-Test-Patterns-Refactoring-Code/dp/0131495054/ref=pd_bbs_sr_1/402-5245909-8257750?ie=UTF8&s=english-books&qid=1194787748&sr=8-1

Posted: dimanche 11 novembre 2007 13:42 par azra
Classé sous :
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le il y a 13 heures et 10 minutes

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le il y a 18 heures et 53 minutes

- [Best Practices] Customisation du My Site : Comment le modifier en amont et en aval par The Mit's Blog le il y a 20 heures et 7 minutes

- Patrick Tisseghem s'en est allé ... par The Mit's Blog le il y a 20 heures et 51 minutes

- MS AutoCollage par alex# le il y a 21 heures et 37 minutes

- Un grand SharePointeur nous a quitte : Patrick Tisseghem manquera à la communauté ! par RedoBlog - The .NET Gentleman !!! le il y a 22 heures et 3 minutes

- [WPF] Comment charger dynamiquement un fichier XAML qui définit des eventhandler ? par Thomas Lebrun le 09-04-2008, 10:56

- Article sur le filtrage des modèles de site SharePoint par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 09-04-2008, 00:11

- Adopter votre Redo en 3D - Clone Virtuel - avec photosynth par RedoBlog - The .NET Gentleman !!! le 09-04-2008, 00:07

- [Expression Web] Astuce de la Semaine : Mettre en bouton ses macros dans une barre d'outils. par Expression Web & Me le 09-03-2008, 20:48