Модульное тестирование пользовательских правил FxCop - PullRequest
4 голосов
/ 17 ноября 2009

Я хотел бы проверить мои пользовательские правила.

Я видел этот пост: http://weblogs.asp.net/rosherove/archive/2007/02/24/writing-real-unit-tests-for-your-custom-fxcop-rules.aspx

но он не работает с последней версией fxcop. Microsoft.Cci.Method.GetMethod не существует, и я не могу найти альтернативу.

Знаете ли вы, как получить объект Microsoft.FxCop.Sdk.Method?

Заранее спасибо за любую помощь. С уважением,

Ответы [ 4 ]

6 голосов
/ 22 января 2012

Учитывая, что API-интерфейсы, используемые для написания пользовательских правил, примерно так же хорошо документированы и поддерживаются, как и те, которые необходимы для модульного тестирования, и остались такими же между 1,36 (для CLR2) и 10,0 (для CLR4) - это, вероятно, Стоит отметить схему процесса для получения объекта Microsoft.FxCop.Sdk.Method, который может быть выполнен с использованием только типов и методов, объявленных public в сборках FxCop (не требуется хитрость отражения).

Начните с Type объекта, для которого вы хотите Microsoft.FxCop.Sdk.Method, назовите это t. Получите AssemblyNode для сборки, содержащей t через статическую точку входа

assembly = AssemblyNode.GetAssembly(t.Module.Assembly.Location)

Получить FxCop TypeNode, соответствующий t через

assembly.GetType(Identifier.For(t.Namespace), Identifier.For(t.Name))

Затем найдите в поле TypeNode Members, чтобы найти поле, где member.Name.Name - это название метода, который вы искали. Учитывая, что это модульный тест, вы должны быть в состоянии организовать, чтобы проверяемый метод не был перегружен.

Затем позвоните MyRule.Check(member), чтобы выполнить тест; это возвращает коллекцию Problem объектов, которые можно проверить, чтобы утверждать, что она содержит ожидаемые результаты и только ожидаемые результаты.

1 голос
/ 17 февраля 2010

Может быть, вы должны использовать Жандарм , так как это с открытым исходным кодом, и поэтому непринужденно иметь те же проблемы. (Почему Microsoft не может опередить тест-ориентированную разработку?)

1 голос
/ 17 ноября 2009

Удаление моста отражения из FxCop было объявлено довольно давно. Кроме того, использование недокументированного и неподдерживаемого API - не единственная проблема с подходом, используемым в FxCopUnit, который не реализует проверку на ложные срабатывания. Возможно, вы захотите перейти к подходу к тестированию, который использует выходной отчет FxCop, чтобы отследить как отсутствующие, так и неожиданные нарушения.

0 голосов
/ 22 января 2012

Возможно, вы захотите проверить мою основанную на RoslynCTP инфраструктуру тестирования FxCop , в ней есть код, необходимый для выполнения правила и проверки того, что он помечал нужные проблемы. Из-за того, что Roslyn все еще находится в CTP, не все возможности языка .NET могут быть протестированы на данный момент.

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

Любые вклады в правила также приветствуются в этом проекте:).

http://fxcopcontrib.codeplex.com/

...