C# et Unit Test

Hello,

Je vais commencer à bosser sur un assez gros projet et je me pose la question de quoi utiliser pour faire les tests unitaires (Unit Tests pour les francophobes B)).

D’après ce que j’ai vu, Visual Studio propose un truc assez bien fichu pour les faire, j’ai même suivi l’espèce de tutoriel disponible ici.

La grosse question que je me pose du coup, c’est que se passe-t-il si je décide de ne plus utiliser VS 2005 team? Est-ce que mes tests sont toujours exécutables?

Sinon, mon projet a de forte chances de devoir tourner, au moins en partie, sous Mono. Est-ce que les tests unitaires créés de cette manière seront compatibles avec Mono?

Sinon, quelles sont les avantages et inconvénients d’utiliser ceci à la place de Nunit?

Voilà voilà, en espérant que quelqu’un pourra m’aider, merci d’avance.

NUnit et le unit testing de Team System sont extremement similaires… tellement, en fait, qu’avec un peu de magie au niveau de MSBuild, et un peu de #define dans le code, on peut avoir des tests qui compilent et tournent avec l’un ou l’autre systeme. Team System est un peu plus complet par contre vu qu’il propose en plus des tests unitaires des tests de montee en charge et autres trucs sympas que j’ai pas trop testes.

Par contre, si t’as pas Team System, tu peux pas lancer tes tests (vu qu’il faut les assemblies). Evidemment c’est tres facile de les porter pour NUnit apres, mais bon, faut en etre conscient. Et a priori pas de compatibilite avec Mono (par contre, NUnit oui je crois, a verifier sur leur page ouaib).

J’utilise personnellement NUnit a la maison, mais c’est surtout parce que j’utilise les version Express de VS2005.

Super, exactement ce que je voulais savoir.

Par contre, tu peux m’en dire plus à propos du MSBuild et de #define. Ce serait le pied si je pouvais facilement (comprendre de manière quasi-automatique) passer du Unit Testing de Team System vers Nunit, ça me permettrais d’avoir à la fois les tests de perfs, les colorations des trucs qui ont été testés et en plus une compatibilité vers Mono.

Merci

J’ai pas le temps de rechercher la page sur laquelle j’avais vu le truc, mais grosso modo, pour faire des tests basiques, t’as juste besoin de 3 ou 4 attributs a mettre sur des methodes. Chez NUnit, les attributs sont “SetUp” et “TearDown” (pour indiquer les methodes a executer au debut et a la fin de chaque test unitaire), et “TestSuite” et “Test” (pour indiquer les classes contenant des tests, et chaque method de test). Ensuite, il y a quelques fonctions d’assertions (Assert.IsEqual, Assert.IsTrue, etc…). Chez TeamSystem Unit Testing, c’est le meme fonctionnement, sauf que le nom des attributs et des methodes change. Donc un petit coup de macros/usings pour faire que ca ecrive l’un ou l’autre nom, et ca roule ma poule… genre:

// a mettre au debut de chaque fichier
#if USE_NUNIT
using MyTestAttribute=NUnit.Framework.JeSaisPasTrop.TestMethodAttribute;
#elif USE_TEAM_SYSTEM
using MyTestAttribute=Microsoft.VisualStudio.PouetTagada.UnitTest.TestThingieAttribute
;
#endif

et donc, tu utilises le “faux” attribute “MyTestAttribute” qui, en fonction de ce qui est defini, va utiliser TeamSystem ou NUnit. Par contre, apres, faut bidouiller avec MSBuild pour qu’il reference la DLL de NUnit ou TeamSystem egalement, mais la il vaut mieux que t’ailles lire de la doc sur MSBuild plutot que j’explique parce que y’a plein de facons de faire.

Et sinon, tu peux simplement coder pour l’un, vu qu’il suffit juste de faire un gros Search&Replace sur tous tes fichiers pour changer le nom des attributs et des methodes quand tu voudras passer a l’autre.

Note que ca marche donc seulement pour les trucs basiques (je sais pas apres a quel point les 2 frameworks divergent quand il s’agit de fonctionnalites plus avancees).