Я думаю, что в значительной степени невозможно сделать это автоматически. Помните, что O (g (n)) является верхней границей худшего случая, и много функций работают лучше, чем это для большого количества наборов данных. Необходимо было бы найти набор данных худшего случая для каждого для сравнения их. Это - трудная задача самостоятельно для многих алгоритмов.
Начиная с VS2010 у нас есть ExcludeFromCodeCoverageAttribute
. Комментаторы отметили, что это работает как в NCover, так и в DotCover + NUnit. Пример использования:
[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }
См. Также эту ссылку . Они предлагают использовать VSInstr в качестве инструмента командной строки, у него есть параметры / EXCLUDE (это не так удобно).
Я нашел некоторую информацию о паре диагностических атрибутов DebuggerNonUserCodeAttribute и DebuggerHiddenAttribute , которые указывают, что использование этих атрибутов приведет к заставит анализатор покрытия в VS исключить их из результатов. Я пробовал использовать атрибут DebuggerNonUserCodeAttribute, и, похоже, он работает. Я, вероятно, смогу смириться с этим для большинства классов, о которых я думаю, хотя мне не нравится побочный эффект невозможности войти в эти классы. Это не должно быть проблемой для классов-оболочек, но может оказаться так и с классами, которые по своей сути трудно тестировать, и мне нужен доступ отладчика.
Я все еще ищу альтернативы.
С NCover вы можете создать атрибут, а затем указать NCover игнорировать этот атрибут.
В наших проектах мы определили этот атрибут (без пространства имен, поэтому его легко использовать):
public class CoverageExcludeAttribute : Attribute { }
Мы используем NAnt, поэтому у нас есть цель, которая выглядит следующим образом:
<target name="unittests" description="run nunit tests" >
<ncover
....
excludeAttributes="CoverageExcludeAttribute"
/>
</target>
Вопрос 9 в FAQ NCover описывает этот метод. Мы основали наше решение на этом.
В качестве альтернативы вы можете использовать функцию исключения NCoverExplorer, чтобы исключить пространства имен и сборки из окончательного отчета. Это просто удаляет данные из отчета, но конечный результат остается тем же.
Мы используем оба метода.