Как найти код, который вызывается только тестами

Иногда я просматриваю некоторый код, я ищу использование метода (используя resharper) и обнаруживаю, что он вызывается только тестами. Так что это эффективно избыточно, и я могу удалить его и методы, которые его вызывают.

Очевидно, что нет смысла размещать неиспользуемый код, замедляя сборку и запуск теста. Что мне нужно, так это инструмент, который может сказать мне, где находятся все биты производственного кода, к которым имеют доступ только тесты.

У меня есть полная версия Resharper, а также пробная версия NDepend, но я не узнал, как использовать любой из них, чтобы получить желаемый результат (без оплаты за него). Я подозреваю, что это возможно с полной версией NDepend, но есть ли другие инструменты, о которых люди знают?

Если контекст помогает, решением является веб-сайт ASP.net, большая часть функциональности которого обрабатывается службой WCF. Таким образом, единственными действительными точками входа в основную часть кода являются методы обслуживания. Тесты проводятся в отдельных проектах.

Я начал щедрость, потому что уверен, что кто-то еще должен был решить эту проблему раньше!

3 ответа

Решение

Поиск вручную с помощью NDepend должен работать с Dependency Matrix, Там вы можете увидеть, какие методы используются только сборочными тестами.

Я не уверен, что вы можете написать собственные запросы CQL с помощью пробной версии. Но с Pro-версией вы можете использовать Query как это:

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

Чтобы это работало, вы должны создать проект NDepend, который знает все ваши сборки.

За NAME_OF_THE_UNIT_TEST_ASSEMBLY Вы должны вставить свою сборку модульного теста, а во второй части вы должны указать свои сборки производственного кода с IsUsedBy и отделить их с помощью OR.

Нетехнический подход состоит в том, чтобы временно удалить тестовый проект из вашего решения, а затем использовать анализ кода Visual Studio (или FxCop), чтобы найти любые методы, которые не вызываются чем-либо еще.

Вы можете использовать NDepend с некоторыми пользовательскими запросами... Это просто не в моей голове, никогда не использовал его именно для этого, но оно должно работать.

Другие вопросы по тегам