Как я могу исключить лямбда-функции в свойствах из покрытия кода? - PullRequest
4 голосов
/ 03 сентября 2010

Я пытаюсь собрать хорошую статистику покрытия кода для моего приложения на C #, но я хотел бы игнорировать сгенерированные классы SubSonic, поскольку нет никакого смысла в сборе статистики покрытия кода для этих функций.

Iотредактировал файл ActiveRecord.tt, включив атрибут [ExcludeFromCodeCoverage] в каждый метод и свойство, и это удалило большинство ненужных результатов в моем окне покрытия кода.Однако, несмотря на наличие атрибута исключения покрытия кода, лямбда-выражения в свойствах помечаются как непокрытые.Как пример:

[ExcludeFromCodeCoverage]
int GetValue
{
    get
    {
        this.SomeMethod(); // this is excluded
        return this.Find(x => x.Value == this._Value); // this.Find is excluded
                                                       // but x => x.Value == ...
                                                       // is not.
    }
}

Это происходит только в свойствах.Лямбда-выражения игнорируются в методах, как и ожидалось.

Теперь, для меня это довольно раздражает, но не обязательно фатально, так как я могу просто игнорировать эти выражения при просмотре списка покрытия кода.Однако наш клиент потребовал, чтобы уровень покрытия нашего кода был выше 95%.Маловероятно, что я смогу заставить их понять, что эта статистика в значительной степени бесполезна.

Я мог бы автоматически создавать модульные тесты вместе с файлом ActiveRecord.tt, но это вряд ли идеально.

Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Добавьте атрибут [ExcludeFromCoverage] к классу вместо свойства.Все в классе будут исключены, включая лямбды.

1 голос
/ 05 сентября 2010

Хотя я не уверен, какие инструменты вы используете для модульного тестирования, вы можете попробовать переместить атрибут поверх объявления метода get:

int GetValue
{
    [ExcludeFromCodeCoverage]
    get
    {
        this.SomeMethod();
        return this.Find(x => x.Value == this._Value);
    }
}

Это, потому что во время компиляциисвойство GetValue преобразуется в метод с подписью get_GetValue : int

...