Tag: .NET

WCF, REST, XML, JSON-P et accessoirement jQuery

Posted by – March 10, 2010

Préambule


Imaginons que l’on veuille développer un service web d’interrogation basé sur REST, c’est à dire qui s’appuie sur HTTP uniquement pour les requêtes et les (codes : 200, 400, 404, 403, …) réponses. Les réponses peuvent être au format Xml ou JSON. Ce service reste simple : une entrée du type int, et un retour d’un type primitif : string, ou un tableau de string : pour un n° de responsable, avoir les n° associations qu’il gère. More

Top des billets d’août 2009

Posted by – September 3, 2009

Top des billets consultés pour ce mois d’août, tout le monde n’était pas en vacances à ce que je vois :


  1. jQuery, autocomplete, JSON
  2. NHibernate : HQL et Criteria
  3. VServer : une mise en place sous Debian
  4. PuTTY, SSH et autologin
  5. Comment crypter les paramètres d’une Querystring – ASP.NET/C#
  6. Architecture PAC : introduction à l’architecture n-tiers pour les applications Web – 1/3
  7. Jouons avec les alias (CNAME) DNS : google (gmail, cal, blog, …), feedburner, myopenid, un soupçon de SaaS avec son domaine
  8. J’ai enfin trouvé : Mouse gestures pour Firefox 3
  9. Mise en place de Subversion sous Windows, VSS to SVN
  10. Migration des applications Web (ou pas) vers .NET 3.5

Il faudrait que j’en fasse des 2èmes éditions sur certains.

Alt.NET : AOP avec FastConnect

Posted by – May 29, 2009

Romain (un billet de circonstance), spécialiste de ce domaine, nous fera une présentation de l’AOP. Cela sera FastConnect qui hébergera la rencontre.

Informations et inscription avec Doodle à l’adresse du blog d’Alt.NET, à ne pas rater !

Virtual Techdays (Developers) 2009

Posted by – March 4, 2009

Si le mercredi 1er avril, vous avez envie de passer une nuit blanche de geek, alors les Virtual Techdays 2009 sont pour vous : 95 sessions sur 3 fuseaux horaires, et on line.

Rien que pour l’originalité de l’évènement et son challenge, on y sera, du moins en partie.

Il sont fous ces ricains.

Enquête : les développeurs .NET et leur relation aux réseaux sociaux

Posted by – March 3, 2009

Matt Berseth a lancé une enquête destinée aux développeurs .NET et à leur relation aux réseaux sociaux (blog, twitter, facebook, …).

Vous pouvez y contribuer en y répondant, cela prend 5 mn.

Au passage, Matt propose sur une seule page, un ensemble de démos bien attrayantes sur des sujets aussi divers qu’intéressant : jQuery, Silverlight, ASP.NET, Ajax, …

[EDIT] : le résultat de l’enquête a été délivrée.

HashSet…et match

Posted by – November 3, 2008

Qui dans la salle n’a jamais eu à traiter des synchronisations d’éléments entre 2 systèmes ou à gérer des ensembles d’objets ? …personne bon, tant mieux, ce billet devrait être utile.

More

Tests in progress

Posted by – October 19, 2008

Préambule

Nous sommes en train de reprendre un module pour préparer une bascule prochaine. Ce module concerne une gestion de listes de diffusion (de discussions, distributions, newsletters, …) qui contient des actions simples : création ou suppression d’une liste, ajout ou suppression d’un abonnement.

C’est l’occasion d’ implémenter des tests sur ce module. Pas tout à fait TDD dans le principe, mais cela aura au moins le mérite de commencer à prendre la main sur les frameworks et la méthode d’implémentation.

On va procéder par étapes, en commençant petit, il est toujours préférable d’être raisonnable dans ses objectifs, think big, start small disait mon grand-père agile.

Dans l’écriture de ces tests, il va s’agir de vérifier les entrées (chaînes de caractères) passées aux différentes méthodes, à savoir que le nom de la liste, et l’email de l’abonné soient bien formés (en gros que les regexp qui vérifient ces entrées fonctionnent).

On tentera (presque) de respecter le modèle du triptyque RED-GREEN-REFACTOR, sauf que dans notre cas, il existe du code :

  • écriture d’un test, le faire planter, le résultat du test runner doit être au rouge,
  • faire passer le test au vert,
  • réécrire le code le cas échéant

Outils

Le framework de tests utilisé est MbUnit, et le runner un add-in VStudio TestDriven.NET. Une version d’évaluation de ReSharper est également installée pour accélérer les ajustements de code.

Dès que je peux, je tenterai également ce projet qui me parait fort intéressant : mbunit-R#.

Mise en place

Un peu de théorie

Le module s’appelle ListManager, notre projet de tests se nommera donc selon la convention ListManager.Tests. Les noms des méthodes de tests sont écrites selon le format suivant : ”NomMethodManager_ResultatAttendu_ScenariodeTest’.

Les méthodes de notre Manager à tester sont de l’ordre de 4, on s’arrêtera à la 1ère pour notre exemple :

  • CreateList(list) : créer une liste
  • DeleteList(list) : supprimer une liste
  • Subscribe(list, email) : abonner à une liste un email
  • Unsubscribe(list, email) : désabonner d’une liste un email

Sur notre existant, chaque méthode ne renvoie que des exceptions, notamment sur la vérification de la validité des entrées, ici list et email. Des expressions régulières sont utilisées pour tester le format de ces 2 paramètres. En gros que les caractères du type [a-z0-9-_.] sont acceptés. Chaque méthode renvoie une exception ArgumentException s’il s’avère que le format des chaînes est erroné.

Le Manager peut être utilisé avec 2 fournisseurs possibles, qui représentent 2 moteurs de listes de diffusion (SYMPA ou LYRIS). L’un ou l’autre est sélectionné selon la stratégie adoptée. Les tests de différents cas d’entrées sont à dérouler bien entendu sur les 2 providers.

La base posée, passons à l’écriture de nos tests.

Passons à la pratique

Testons CreateList(). Le résultat attendu est une exception ArgumentException sur des chaînes qui ne respectent pas le format attendu. Le test doit être au vert si la méthode renvoie donc bien une exception sur une mauvaise entrée, par exemple :

CreateList(“éléphant”) doit renvoyer une erreur. Le code pour tester que ces cas renverront bien un exception pour les 2 providers, l’attribut [ExpectedArgumentException] de MbUnit permet de tester l’exception attendue :

  1. using ListManagerConnector;
  2. using MbUnit.Framework;
  3.  
  4. namespace ListManager.Tests
  5. {
  6. [TestFixture]
  7. public class ListManagerTests
  8. {
  9. [Test]
  10. [ExpectedArgumentException]
  11. public void CreateList_onSympa_ShouldThrow_IfNameOfList_IsNotWellFormed()
  12. {
  13. var lm = AbstractFactory.Factory("SYMPA").ListManagerControler;
  14. lm.CreateList("éléphant");
  15. }
  16.  
  17. [Test]
  18. [ExpectedArgumentException]
  19. public void CreateList_onLyris_ShouldThrow_IfNameOfList_IsNotWellFormed()
  20. {
  21. var lm = AbstractFactory.Factory("LYRIS").ListManagerControler;
  22. lm.CreateList("éléphant");
  23. }
  24. }
  25. }

Ce premier est pas mal, mais rien que pour éléphant, il nous faut 2 méthodes de tests. Pour chaque motif à tester, 2 méthodes supplémentaires, ce qui devient vite rébarbatif et donc peu motivant. Pour améliorer cela, MbUnit fournit la possibilité d’injecter des jeux de tests dans les méthodes (dans le même principe que des tests fonctionnels, voir FitNesse). Pour cela, utilisons les attributs [RowTest] (qui remplace l’attribut de base [Test]) et [Row] pour dérouler les cas intéressants et ce, sur les 2 providers.

Testons les motifs éléphant, l’éléphant, et certains autres cas sur les providers nommés SYMPA et LYRIS. Le paramètre strategy permet de tester chaque méthode sur les 2 providers :

  1. using ListManagerConnector;
  2. using MbUnit.Framework;
  3.  
  4. namespace ListManager.Tests
  5. {
  6. [TestFixture]
  7. public class ListManagerTests
  8. {
  9. [RowTest]
  10. [Row("malist@cc", "SYMPA")]
  11. [Row("malist@dummy.fr", "SYMPA")]
  12. [Row("", "SYMPA")]
  13. [Row("éléphant", "SYMPA")]
  14. [Row("l'elephant", "SYMPA")]
  15.  
  16. [Row("malist@lyris.fr", "LYRIS")]
  17. [Row("malist@fr", "LYRIS")]
  18. [Row("", "LYRIS")]
  19. [Row("éléphant", "LYRIS")]
  20. [Row("l'elephant", "LYRIS")]
  21. [ExpectedArgumentException]
  22. public void CreateList_ShouldThrow_IfNameOfList_IsNotWellFormed(string listname, string strategy)
  23. {
  24. var lm = AbstractFactory.Factory(strategy).ListManagerControler;
  25. lm.CreateList(listname);
  26. }
  27. }
  28. }

et voilà, comment en une méthode implémenter un jeu de 10 tests. Jouons la méthode avec TestDriven sous VStudio 2008 et le runner de MbUnit. On voit que MbUnit déroule chaque cas (éléphant, l’éléphant, ..) sur la même méthode.

Sous Visual Studio :

MbUnit

En lançant le runner de MbUnit :

MbUnit

Si nous avions introduit une donnée correcte, un des tests aurait été dans l’état rouge ou FAILURE, par exemple le test suivant doit échouer :

  1. [Row("od", "SYMPA")]

MbUnit

à chaque nouvelle écriture d’une méthode de test, on commencera par la faire échouer de cette façon.

Rétrospective

Ces premiers tests répondent à tout ou partie à notre besoin : vérifier que les entrées de nos méthodes sont bien formées.

Quelques retours sur ces 1ers tests :

  • dans notre cas, il a fallu que les 2 serveurs de listes soient en fonction, sans compter la configuration ad-hoc nécessaire. Aussi, il aurait été bénéfique que les 2 providers soient injectés dans le manager, afin de pouvoir les simuler lors des tests, part des Stubs / Mocks par exemple. Ici, on part du principe que nos serveurs fonctionnent et rendent le service attendu. Bien sûr, si l’objectif était de les tester alors on déploierait les tests nécessaires, même si cela concerne plus de l’intégration que des tests unitaires,
  • on comprend mieux la nécessité d’une usine d’intégration continue. Je m’imagine mal exécuter des centaines de tests à chaque fois sur mon IDE. L’usine peut apporter une solution à cette question.
  • j’ai pu m’apercevoir que des cas passaient alors qu’ils sont interdits, des bugs donc éventuels, maintenant corrigés.
  • au niveau de la conception objet, on s’aperçoit vite que c’est perfectible, que le code doit être non seulement OO mais aussi testable, ce qui implique un compromis des deux.
  • bonne expérience, à répéter de toute urgence, passionnant !

Tips & Tricks

Sous Visual Studio, à l’aide de TestDriven, le fait de se placer sur une méthode de test et de lancer les tests ne déroule ces derniers que sur la méthode.

ReSharper ou R# est un très très bon add-in, c’est assez remarquable ce qu’il arrive à conseiller comme réécriture du code, il reste à convaincre d’investir 200 € (par licence).

Evènements du mois de novembre 2008

Posted by – October 14, 2008

2 évènements du mois de novembre à ne pas manquer :

ALT.NET Paris

La prochaine rencontre aura lieu le mardi 4 novembre.

[EDIT] : La rencontre aura lieu dans les locaux de Valtech qui nous prêtent gentiment un local, pizzas incluses, Valtech. RDV à 20h.

Vous pouvez déjà visiter le portail afin de vous inscrire au groupe Google (pour la liste), ou au groupe Facebook pour l’inscription aux évènements.

Teasing : pour cette rencontre de novembre, il y a de bonnes chances d’avoir un contributeur du projet Mono, un sujet d’actualités avec la sortie de la 2.0.

Paris Web 2008

Vous avez jusqu’à ce soir (14 octobre) pour obtenir un rabais sur le ticket d’entrée (-50 %) pour les passes techniques et décideurs. Pour ma part, les ateliers techniques du (samedi) 15 novembre semblent intéressants, avec un prix à 10 € HT, notamment :

  • RDFa versus µformats
  • jQuery
  • CSS

[EDIT] : les inscriptions sont ouvertes.

encore faudra-t-il se lever pour aller à Villejuif.

Migration des applications Web (ou pas) vers .NET 3.5

Posted by – October 8, 2008

Ça y est, après presque qu’un an de la sortie de la 3.5, décision est prise de migrer la plateforme de .NET 2.0 vers .NET 3.5. Au niveau des postes de travail, il s’agit également de passer de Visual Studio 2005 à VS 2008.

En préambule, on m’a posé la question, toute légitime, de l’intérêt d’une telle migration (ie : les avantages sans doute). A cette question, on pourrait avancer les arguments suivants :

  • par expérience, plus on attend une migration pour rattraper un retard (ie : gap en années important entre la v2 et la v3.5), plus on aura du mal à la faire sereinement, et n’être pas sereins c’est nous garder dans une inertie certaine, et de ne plus faire de migrations techniques in fine,
  • un apport en termes de fonctionnalités, une plus grande marge de possibilités et de simplification dans le développement, je pense notamment à Linq, WCF / ADO.NET Data Services (pour l’approche services), et toutes les petites choses qui rendent la vie plus simple au niveau syntaxique (cet argument n’est valable bien entendu que si le public est réceptif à ce type d’avantages),
  • un gain en termes de performances sur certaines briques du framework (voir 3.5 SP1),
  • la difficulté de plus en plus accrue de trouver des sources sur le Net en 2.0, ne s’ouvrant qu’avec VStudio 2008, voire des frameworks / librairies fournis uniquement en 3.5, la migration, à termes, deviendraient d’autant plus difficile,
  • …tout autre argument digne d’intérêt pour les non techniciens,

ce point réglé, passons aux choses sérieuses.

More

Ruby In Steel Free

Posted by – October 7, 2008

L’éditeur de RIS (“Qui es-tuuuuuuuuuuuuuuu ?”…sic…je sors) offre une édition de leur produit pour Visual Studio 2008, c’est ici.

Pour rappel, Ruby In Steel est un add-in Visual Studio qui permet de développer en Ruby sous cet IDE (coloration syntaxique, mode console, …).

Vous aurez besoin pour cette version, d’ IronRuby et certainement (même si c’est inclus dans RIS), de Ruby Installer.

Pour s’amuser, on peut essayer ces bouts de code :