Использование функциональности .NET Introspection / FxCop Rules в модульных тестах - PullRequest
1 голос
/ 21 сентября 2011

возможно ли использовать функциональность .NET Introspection в модульных тестах?В нашем программном обеспечении я хотел бы запретить использование некоторых операций (сравнение значений enum, поскольку в качестве специального метода для этой цели).Я помню, что FxCop (статический анализ кода) предлагает доступ к модели кода с помощью самоанализа.С его помощью вы можете проверить, используется какая-то функция или нет.Я хотел бы написать модульный тест, выполняющий ту же проверку, но я не уверен, предлагается ли Introspection или нечто подобное для модульного теста.Или, может быть, у вас есть другая идея, как я могу это сделать.

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 21 сентября 2011

Похоже, что внутренние компоненты FxCop нельзя использовать внешне (кроме как в самом FxCop или в Visual Studio).

Если вы хотите проверить свою архитектуру, вы можете попробовать функцию PostSharp Проверка архитектуры или альтернативу FxCop Mono Жандарм .

0 голосов
/ 22 сентября 2011

Инструмент NDepend может помочь вам сделать это благодаря NDepend.API . Отказ от ответственности: я являюсь одним из разработчиков инструмента

NDepend.API предлагает пространство имен NDepend.CodeModel , которое содержит все типы и члены, необходимые для анализа .NETкодовая база.

С помощью NDepend.API вы можете писать модульные тесты для проверки широкого спектра проблем, таких как, например, неиспользуемые методы . NDepend.CodeModel разработан для поддержки синтаксиса LINQ, и 200 правил кода по умолчанию для LINQ предложены по умолчанию (написано так, как мы называем CQLinq ).

0 голосов
/ 21 сентября 2011

Я не уверен насчет FxCop, но вы можете использовать .NET Reflection (это то, что вы подразумеваете под интроспекцией?) Для принудительного применения определенных поведений кода.

Например, в некоторых тестах я использовал Reflectionубедитесь, что некоторые «внутренние» типы не доступны через наш общедоступный сервис API.Мы просто зациклились на нашем общедоступном API и убедились, что в списке «внутренних» типов нет открытых типов (аргументов метода, свойств и т. Д.).Это было очень удобно, когда мы упаковывали сторонние компоненты, но мы хотели убедиться, что ни один из типов в их библиотеке не был представлен через наш API.

Если вы не знакомы с отражением .NET, он предоставляет вам API, который позволяет вам запрашивать типы информации, такие как методы класса, аргументы метода, свойства класса и т. Д. Вы можете начать с обзора здесь:

http://msdn.microsoft.com/en-us/library/f7ykdhsy(v=vs.71).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...