Test unitaire Resharper + NUnit + VS 2010

Pourquoi des tests unitaires?

Pour tout un tas de raisons. En vrac:

  • permet de définir rapidement une spec
  • oblige à réfléchir avant de coder
  • la maintenance est simplifiée, si on a une bonne couverture de test unitaire, il suffit de relancer nos tests pour détecter les régressions.
  • être sûr de la qualité de ce que l’on envoie en production

en gros que des avantages…

Pourquoi Resharper pour les test unitaires?

Le plugin Resharper pour Visual Studio propose, entre autre, une interface d’exécution pour les tests unitaire.

Le problème

passer de Visual Studio 2008 à Visual Studio 2010.

Pourquoi est-ce un problème?

Le problème est une limitation de Visual Studio 2010, voir MS Connect Bug pour les détails http://connect.microsoft.com/VisualStudio/feedback/details/453668/cant-change-target-framework-for-test-project-in-vs2010
Cette limitation impose de passer les projets de test en .Net 4.0 ce qui peut avoir quelques effets de bord, surtout quand on utilise des lib externes.

Solution 1
Si vous le pouvez, passez vos projets de test en 4.0. Vous pourrez continuer d’exécuter dans VS 2010 vos tests unitaires avec resharper.

Solution 2
Si vous êtes dans mon cas, où vous des dépendances sur des libs en 3.5 ou de la post compilation n’acceptant pas un mix de version, je vous propose de passer en ligne de commande avec par exemple quelque chose comme:

RunUnitTest.cmd

@echo off
setlocal enabledelayedexpansion

set __UnitLib.1="C:\ProjUnitTestPath\bin\Debug\LibTest1.dll"
set __UnitLib.2="C:\ProjUnitTestPath\bin\Debug\LibTest2.dll"
set __UnitLib.3="C:\ProjUnitTestPath\bin\Debug\LibTest3.dll"

FOR /F "tokens=2* delims=.=" %%A IN ('SET __UnitLib.') DO (
ECHO Unit Test: %%A = %%B
if !__UnitLibAll!=="" ( set __UnitLibAll=%%B
) else set __UnitLibAll=!__UnitLibAll! %%B
)
ECHO Unit Tests: %__UnitLibAll%

"C:\Program Files (x86)\NUnit 2.5.3\bin\net-2.0\nunit-console-x86.exe" %__UnitLibAll%

Vous pouvez bien sûr faire générer à NUnit un fichier xml de résultat interprétable par un serveur d’intégration continue comme Hudson avec le paramètre « /xml=nunit-result-output.xml ».

Solution 3

Vous avez aimé la ligne de commande pour exécuter l’ensemble des tests, mais vous ne la trouvez pas très pratique pour mettre des break points?
Une solution consiste à attacher le programme NUnit à la bibliothèque de test unitaire…

Etapes à suivre:

  1. Click droit sur votre projet de test -> Properties
  2. Allez dans l’onglet Debug
  3. Sélectionnez « Start external program » et remplir avec « C:\Program Files (x86)\NUnit 2.5.3\bin\net-2.0\nunit-console.exe »
  4. Dans « Command line arguments » insérez le nom complet de votre assembly exemple « truc.toto.test.dll »

Pour débugger:
Click droit sur le projet -> Debug -> Start new instance

Pour exécuter seulement quelques-uns des tests, ajouter l’option « /runselected »

Solution 4

Vous pouvez attacher la GUI de NUnit à Visual Studio en mode debug. Ceci vous permettra de sélectionner vos tests unitaires.
NUnit Gui

Solution 5 (Mise à jour du 12/02/2011)

Enfin, vous pouvez toujours faire cohabiter une solution de projet Visual studio 2010 avec une solution Visual studio 2008.
Pour cela,

  1. vous ne touchez pas à votre solution Visual studio 2010.
  2. créez un sous répertoire ‘UnitTest’ dans votre arborescence de solution.
  3. dans ce répertoire, créez une nouvelle solution vierge avec Visual Studio 2008
  4. à partir de Visual Studio 2008 ajouter vos projets de test unitaires et leurs dépendances aux strict minimum, le compilateur reprenant le contenu du répertoire d’exécution préexistant.

A part quelques warnings vous disant que Visual studio 2008 ne peut pas compiler du .Net 4, tout devrait marcher.

Laisser un commentaire