2009-11-17 13 views

Répondre

1

Le retrait du pont de réflexion de FxCop était announced il y a déjà un certain temps. En outre, l'utilisation d'une API non documentée et non prise en charge n'est pas le seul problème avec l'approche utilisée dans FxCopUnit, qui n'implémente pas le filtrage des faux positifs. Vous pouvez envisager de passer à une approche de test qui consomme le rapport de sortie FxCop afin de détecter à la fois les violations manquantes et les violations inattendues.

+0

ah, c'est vraiment ennuyeux cela deviendra plus difficile de faire des tests unitaires – Tim

1

Peut-être que vous devriez utiliser Gendarme car il est open source et donc il est difficile d'avoir les mêmes problèmes. (Pourquoi ne peut pas Microsoft obtenir la tête de test axée sur le développement rond?)

6

Étant donné que les API utilisées pour écrire les règles personnalisées sont à peu près aussi bien documentés et pris en charge que ceux nécessaires pour les tests unitaires - et sont restés la même chose entre 1,36 (pour CLR2) et 10,0 (pour CLR4) - il est probablement utile de noter le contour du processus pour obtenir un objet Microsoft.FxCop.Sdk.Method, qui peut être effectué en utilisant uniquement les types et méthodes déclarés public dans les assemblages FxCop (pas de ruse de réflexion) Champs obligatoires).

Commencez par le Type de l'objet pour lequel vous voulez Microsoft.FxCop.Sdk.Method, appelez cela t. Obtenez le AssemblyNode pour l'assemblage contenant t via le point d'entrée statique

assembly = AssemblyNode.GetAssembly(t.Module.Assembly.Location) 

Obtenez le FxCop TypeNode correspondant à t via

assembly.GetType(Identifier.For(t.Namespace), Identifier.For(t.Name)) 

Ensuite, la recherche dans le champ de MembersTypeNode pour trouver celui où member.Name.Name est le nom de la méthode que vous cherchiez. Étant donné qu'il s'agit d'un test unitaire, vous devriez pouvoir faire en sorte que la méthode fictive examinée ne soit pas surchargée. Puis, appelez le MyRule.Check(member) pour effectuer le test; cela retourne la collection d'objets Problem, qui peuvent être inspectés pour affirmer qu'il contient les résultats attendus et seulement les résultats attendus.

+0

fonctionne parfaitement! Cela devrait être la réponse acceptée. Merci! –

+0

Cela fonctionne parfaitement. Cependant, notez que toutes les méthodes surchargées doivent être appelées manuellement, par exemple 'BeforeAnalysis()' et 'AfterAnalysis()'. – Fahad

0

Vous voudrez peut-être vérifier mon RoslynCTP based FxCop test framework, il a le code requis pour exécuter une règle et pour vérifier qu'il a signalé les bons problèmes. En raison du fait que Roslyn est toujours en CTP, toutes les fonctionnalités du langage .NET ne peuvent pas être testées à ce stade.

Il devrait être assez simple d'extraire le code requis pour exécuter les règles contre tout assemblage.

Toutes les contributions aux règles sont également les bienvenues pour ce projet :).

http://fxcopcontrib.codeplex.com/