2009-01-06 7 views
2

Je voudrais que le build build vérifie le nombre de NotImplementedExeptions présentes dans mon code .NET, donc j'espère que nous pourrons les supprimer avant de les libérer. Ma première pensée est que FxCop pourrait être un bon outil pour le faire. Quelqu'un at-il une règle FxCop personnalisée pour cela? Comment pourrais-je en créer une moi-même?Règle FxCop qui vérifie les exceptions NotImplemented

+0

Quelqu'un sait si NDepend serait un bon outil pour cela? http://www.ndepend.com/ –

Répondre

3

J'ai effectivement implémenté un et montré le code dans this answer.

1

Il y a des tonnes de ressources sur le net sur la façon de créer votre propre règle FxCop, mais comme 'NotImplementedException' est un nom si unique, vous pourriez probablement faire un compte de son occurrence dans le texte des fichiers. Créez un ItemGroup pour tous les fichiers .cs, puis utilisez une commande DOS appropriée (telle que "find/c") et obtenez le nombre comme sortie, via la tâche EXEC.

0

Il y a des moments où un NotImplementedExeptiondevrait être jeté - un exemple serait si vous avez une mise en œuvre partielle de IBindingList.

Il y a plenty de resourcesout there pour creatingcustomfxCop rules. Cependant, un "trouver dans la solution" peut être une approche appropriée (en supposant que vous n'avez pas besoin de cela dans une construction automatisée)

+0

Pour une interface partiellement implémentée que vous ne prévoyez pas d'implémenter, vous devez utiliser NotSupportedException. Merci pour les liens, je vais les vérifier. Je veux cela pour une construction automatisée, juste pour me faire savoir combien il reste dans le code. Les tests pourraient être meilleurs. –

+0

Bon commentaire; Je ne pense pas que vous ayez besoin de NotImplementedExceptions dans le code de version prête pour la production, donc une étape de construction quotidienne pour les compter comme demandé peut être très sensée. – peSHIr

+0

@Lance - bon point. Il me semble que j'ai besoin de remplir mon café :) –

4

Un tel test échouera si plus de 10 méthodes créent une exception NotImplementedException. En cas d'échec, il rapportera toutes les méthodes qui créent cette exception.

var throwingMethods = codebase.Methods 
    .Where(m => m 
     .GetInstructions() 
     .Exists(i => i.Creates<NotImplementedException>())) 
    .ToArray(); 

if (throwingMethods.Length > 10) 
    CollectionAssert.IsEmpty(throwingMethods); 

Où est créé codebase comme ceci:

var codebase = new Codebase("Assembly1.dll","Assembly2.dll"); 

Snippet utilise Lokad.Quality.dll du Lokad Shared Libraries.

+0

C'est vraiment cool! Je n'ai pas beaucoup entendu parler de Lokad auparavant, mais l'objet Codebase a l'air vraiment cool. Merci. –

Questions connexes