Как найти код, который вызывается только тестами
Иногда я просматриваю некоторый код, я ищу использование метода (используя 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 с некоторыми пользовательскими запросами... Это просто не в моей голове, никогда не использовал его именно для этого, но оно должно работать.