Использование функциональности .NET Introspection/FxCop Rules в модульных тестах

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

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


person llasarov    schedule 21.09.2011    source источник
comment
Есть ли какая-то особая причина, по которой вы хотите сделать это с помощью модульного тестирования, а не просто создать собственное правило FxCop?   -  person Nicole Calinoiu    schedule 22.09.2011


Ответы (3)


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

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

person Karel Frajták    schedule 21.09.2011

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

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

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

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

person JohnD    schedule 21.09.2011
comment
У меня есть enum UserRole { ... }, и я хотел бы убедиться, что сравнение ролей выполняется не с помощью операции is-equal, а с помощью специального метода. Отражение не дает мне возможности проверить весь исходный код. Поэтому и спрашиваю про Самоанализ ;-) - person llasarov; 21.09.2011

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

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

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

person Patrick from NDepend team    schedule 22.09.2011