Подтвердить что ты не робот

Использовать атрибут для пропуска кода из анализа покрытия в Visual Studio

У меня есть несколько классов, которые по той или иной причине не могут быть или не нуждаться в модульном тестировании. Я хотел бы исключить эти классы из своих показателей охвата, чтобы я мог лучше понять охват классов, которые мне действительно волнуют. Сейчас я должен исключить результаты после факта. То, что я хотел бы сделать, это использовать атрибут, чтобы пометить эти классы как исключенные, чтобы они не включались для начала. Есть ли способ украсить класс атрибутом, который автоматически исключает его из анализа покрытия? Будет работать любой анализ покрытия VS или nCover.

FWIW, это классы, которые я могу заверить, проверив, что код верен. В основном это классы-оболочки вокруг существующих классов фреймворков, которые я ввел для того, чтобы высмеять класс фреймворка. Поскольку обертка получает издевательство, они не проходят тестирование. Это нормально, потому что все, что они делают, это обернуть методы класса framework, которые меня волнуют.

4b9b3361

Ответ 1

Начиная с VS2010, мы ExcludeFromCodeCoverageAttribute. Комментарители отметили это для работы в NCover, а также для DotCover + NUnit. Пример использования:

[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }

Также см. ссылку . Они предлагают использовать VSInstr в качестве инструмента командной строки, у него есть опции /EXCLUDE (это не так удобно).

Ответ 2

Я нашел некоторую информацию по нескольким атрибутам диагностики DebuggerNonUserCodeAttribute и DebuggerHiddenAttribute, что указывает, что использование этих атрибутов приведет к тому, что анализатор покрытия в VS оставит их вне результатов. Я пробовал его с помощью DebuggerNonUserCodeAttribute и, похоже, работает. Вероятно, я могу жить с этим для большинства классов, о которых я думаю, хотя мне не нравится побочный эффект того, что вы не можете войти в эти классы. Это не должно быть проблемой для классов-оболочек, но в конечном итоге это может быть связано с классами, которые по своей сути трудно проверить, и мне нужен доступ к отладчику.

Я все еще ищу альтернативы.

Ответ 3

С помощью NCover вы можете создать атрибут, а затем сообщить NCover игнорировать этот атрибут.

В наших проектах мы определили этот атрибут (без пространства имен, поэтому он прост в использовании):

public class CoverageExcludeAttribute : Attribute { }

Мы используем NAnt, поэтому у нас есть цель, которая выглядит так:

<target name="unittests" description="run nunit tests" >        
    <ncover
        ....
        excludeAttributes="CoverageExcludeAttribute"
    />
</target>

Вопрос 9 в FAQ NCover описывает этот метод. Мы основывали наше решение на этом.

Кроме того, вы можете использовать функцию исключения из NCoverExplorer, чтобы исключить пространства имен и сборки из окончательного отчета. Это просто удаляет данные из отчета, но конечный результат тот же.

Мы используем оба метода.