2010-05-05 14 views
1

Voici le scénario:Visual Studio 2008 Test unitaire ne capte pas les changements de code à moins que je construis l'ensemble de la solution

  1. Modifier mon code:
  2. Changer mon test unitaire pour ce code
  3. Avec le curseur à l'intérieur de la classe de test unitaire/méthode, invoquer les « Exécution de tests dans le contexte actuel » de VS2008 de commande
  4. la fenêtre de Visual studio « de sortie » indique que le dll de code et la dll de test à la fois construire avec succès (dans cet ordre)

Le problème est cependant que le test unitaire n'utilise pas la dernière version de la DLL qu'il vient de construire. Au lieu de cela, il utilise la DLL précédemment construite (qui ne contient pas le code mis à jour), donc le test échoue. Lors de l'ajout d'une nouvelle méthode, il en résulte un MethodNotImplementedException, et lors de l'ajout d'une classe, il en résulte un TypeLoadException, à la fois parce que le test unitaire pense que le nouveau code est là, et ce n'est pas le cas. Si je ne fais que mettre à jour une méthode existante, le test échoue simplement en raison de résultats incorrects.

Je ne peux pas travailler autour du problème en faisant

  1. Modifier mon code:
  2. Changer mon test unitaire pour ce code
  3. Invoke VS2008 de 'Build Solution' La commande
  4. Avec le curseur à l'intérieur de la classe/méthode de test unitaire, appelez la commande "Exécuter les tests dans le contexte actuel" de VS2008

Le problème est que faire une solution de construction complète (même si rien n'a changé) prend plus de 30 secondes, comme j'ai environ 50 projets en C#, et VS2008 n'est pas assez intelligent pour réaliser que seulement 2 d'entre eux . Avoir à attendre 30 secondes juste pour changer 1 ligne de code et relancer un test unitaire est abyssal.

Y at-il quelque chose que je peux faire pour résoudre ce problème? Aucun de mon code n'est dans le GAC ou quelque chose de drôle comme ça, c'est juste vieux dll ordinaire (buiding contre .NET 3.5SP1 sur une machine win7/64bit)

S'il vous plaît, aidez!

+0

Vous avez été assez longtemps pour savoir mieux que d'utiliser 'vs2008' dans vos balises. TTT ... TTT. –

Répondre

1

Après un peu plus creuser, je résolu le problème:

  1. Afficher la liste des références sur le dll test
  2. supprimer la référence à la dll de code dans la liste
  3. Re-ajouter .

J'ai ensuite différencié le.csproj pour voir ce qui avait changé, et il se présentait comme suit

vieux et cassé

<ProjectReference Include="..\Base\Base.csproj"> 
    <Project>{1C61F557-24C5-4B4A-90A8-08D0DCEE15A1}</Project> 
    <Name>Base</Name> 
    <Private>False</Private> 
</ProjectReference> 

Nouveau et bon

<ProjectReference Include="..\Base\Base.csproj"> 
    <Project>{1C61F557-24C5-4B4A-90A8-08D0DCEE15A1}</Project> 
    <Name>Base</Name> 
</ProjectReference> 

Le bit <Private>False</Private> signifie apparemment « copie locale » si ceci explique cela. Note to self: N'oubliez pas de définir Copy Local sur true pour les tests unitaires!

+0

L'assembly de code est-il dans GAC? –

+0

@Orion - Où la copie locale est-elle définie? –