Как игнорировать модульный тест во время анализа покрытия dotCover? - PullRequest
0 голосов
/ 31 марта 2020

Рассмотрим следующий пример воспроизведения (код тестового модуля MS Test):

using System.Diagnostics.CodeAnalysis;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            SharedMethod();
        }

        [TestMethod, ExcludeFromCodeCoverage]
        public void TestMethod2()
        {
            SharedMethod();
            // This is a performance test which will fail during coverage analysis.
            Assert.Fail();
        }

        private void SharedMethod()
        {
            // Should be green
            if (true) ; // NOOP
        }
    }
}

TestMethod2 - это метод тестирования производительности, который будет успешным во время «обычного» модульного теста, но не пройден во время анализа покрытия кода ( из-за дополнительных накладных расходов). Хорошо. Я просто хочу, чтобы этот метод игнорировался при анализе покрытия кода, чтобы мой SharedMethod отображался как «зеленый» (потому что он успешно покрыт TestMethod1.

Согласно JetBrains фильтры покрытия должны делать это, и, да, есть фильтр, активный для ExcludeFromCodeCoverageAttribute:

screenshot of coverage filters

Однако, работает Extensions / ReSharper / Unit Тесты / «Покрыть все тесты из решения» по-прежнему учитывает мой исключенный тест при раскрашивании моего кода:

screenshot of coverage test result

Что я сделал не так? И как мне это сделать? (легко) исключить мои тесты производительности из анализа покрытия кода?

1 Ответ

0 голосов
/ 31 марта 2020

(Это самоотчет, основанный на найденном мной обходном пути. Не стесняйтесь добавлять свой собственный ответ, если вы нашли реальное решение для этой проблемы.)

По-видимому, Фильтры покрытия dotCover влияют только на статистику покрытия, отображаемую в окне Покрытие модульных тестов (% покрытого кода), а не на «раскраску кода».

В качестве обходного пути вы можете обычно исключать тесты некоторых категорий от тестового бегуна ReSharper. Чтобы сделать это, вы сначала добавляете категорию ко всем тестам, которые хотите игнорировать:

[TestMethod, ExcludeFromCodeCoverage, TestCategory("Performance")]
public void TestMethod2()
{
    SharedMethod();
    // This is a performance test which will fail during coverage analysis.
    Assert.Fail();
}

, а затем добавляете эту категорию в Расширения / ReSharper / Параметры / Инструменты / Юнит-тестирование / Общие / "Пропустить тесты из категории ":

screenshot

Ваш тест будет по-прежнему выполняться при запуске с помощью обычного средства запуска тестов Visual Studio (например, Test / Run All Tests), но он будет быть проигнорированным ReSharper и его инструментами.

...