2010-09-21 5 views
8

Gelegentlich suche ich nach Code, ich suche nach Verwendungen einer Methode (mit Resharper) und stelle fest, dass sie nur durch Tests aufgerufen wird. Es ist also effektiv redundant und ich kann es löschen und die Methoden, die es aufrufen.So finden Sie Code, der nur durch Tests aufgerufen wird

Offensichtlich hat es keinen Sinn, ungenutzten Code herumliegen zu lassen, der den Build und den Testlauf verlangsamt. Was ich möchte, ist ein Werkzeug, das mir sagen kann, wo alle Teile des Produktionscodes sind, auf die nur durch Tests zugegriffen wird.

Ich habe eine Vollversion von Resharper, und auch eine Testversion von NDepend, aber habe nicht herausgefunden, wie Sie beide verwenden, um das gewünschte Ergebnis zu erhalten (ohne dafür zu bezahlen). Ich vermute, dass es mit der Vollversion von NDepend möglich ist, aber gibt es noch andere Tools, über die Leute Bescheid wissen?

Wenn der Kontext hilft, ist die Lösung und ASP.net Website, deren Funktionalität von einem WCF-Dienst behandelt wird. Die einzigen gültigen Einstiegspunkte für den Großteil des Codes sind die Dienstmethoden. Die Tests sind in eigenen Projekten.

Ich habe ein Kopfgeld begonnen, weil ich sicher bin, dass jemand anderes dieses Problem schon einmal gehabt und gelöst hat!

+1

Einige dieser Test nur Code ist wahrscheinlich Mocks, Stubs, etc ... – CaffGeek

+0

@Chad alle Mocks, und Stubs usw. sind in meinen Test-Projekten. In dieser Frage interessiere ich mich mehr für den Produktionscode. –

Antwort

4

Manuelles Suchen mit NDepend sollte mit der Dependency Matrix funktionieren. Dort können Sie sehen, welche Methoden nur von den Unit Test Assemblies verwendet werden.

Ich bin mir nicht sicher, ob Sie eigene CQL-Abfragen mit der Testversion schreiben können. Aber mit der Pro-Version können Sie eine Abfrage wie folgt verwenden:

SELECT METHODS WHERE IsUsedBy "ASSEMBLY:NAME_OF_THE_UNIT_TEST_ASSEMBLY" 
AND !(IsUsedBy "ASSEMBLY:NAME_OF_ANOTHER_ASSEMBLY" OR IsUsedBy "ASSEMBLY:ANOTHER_NAME") 

Dazu Sie arbeiten müssen, ein NDepend Projekt erstellen, die alle Ihre Baugruppen kennt.

Für NAME_OF_THE_UNIT_TEST_ASSEMBLY müssen Sie Ihre Unit Test Assembly einfügen und im zweiten Teil müssen Sie Ihre Produktionscode Assemblies mit IsUsedBy angeben und mit OR trennen.

+0

Soweit ich sehen kann, brauche ich die Vollversion, um benutzerdefinierte Abfragen ausführen zu können. Ich suche nach einer benutzerdefinierten FxCop-Regel entlang der Zeilen Ihrer Abfrage (viel schwieriger auf FxCop though ..) –

+2

Wäre cool, wenn Sie die Regel veröffentlichen könnten – Noffls

0

Sie könnten NDepend mit einigen benutzerdefinierten Abfragen verwenden ... Das ist nur von der Spitze meines Kopfes, benutzte es nie für genau das, aber es sollte funktionieren.

+0

Ich habe das untersucht, und es sieht so aus, als müsste ich wahrscheinlich die Pay-Version bekommen, um meine eigenen Abfragen hinzufügen zu können. –

2

Ein nichttechnischer Ansatz besteht darin, das Testprojekt vorübergehend aus Ihrer Lösung zu entfernen und dann mithilfe der Codeanalyse von Visual Studio (oder FxCop) nach Methoden zu suchen, die von keinem anderen aufgerufen werden.

+0

Das Problem mit FxCop ist, dass es öffentliche Methoden ignoriert, wenn Es ist auf der Suche nach einem toten Code, und ich weiß, dass viele der Dinge, die ich hier zu finden versuche, öffentliche Methoden sind –

Verwandte Themen