Фильтрация покрытия кода путем вызова функции в OpenCover

У меня есть несколько интеграционных тестов, написанных для MsTest. Интеграционные тесты имеют следующую структуру:

[TestClass]
public class When_Doing_Some_Stuff
{
    [TestInitialize]
    protected override void TestInitialize()
    {
        // create the Integration Test Context
        EstablishContext();

        // trigger the Integration Test 
        When();
    }

    protected void EstablishContext()
    {
        // call services to set up context
    }

    protected override void When()
    {
        // call service method to be tested
    }

    [TestMethod]
    public void Then_Result_Is_Correct()
    {
        // assert against the result
    }
}

Мне нужно отфильтровать результаты покрытия кода функцией по тому, кто ее вызывает. А именно, я хочу, чтобы покрытие рассматривалось только в том случае, если функция вызывается из функции с именем "When" или к которой применен определенный атрибут.

Теперь, даже если определенный метод в системе вызывается в части EstablishContext некоторых тестов, метод помечается как посещенный.

Я считаю, что для этого нет фильтра, и я бы хотел внести изменения сам, так как OpenCover... ну... открыт. Но я действительно понятия не имею, с чего начать. Может кто-то указать мне верное направление?

1 ответ

Решение

Возможно, вам лучше решить эту проблему с разработчиками OpenCover; хммм... это был бы я тогда, если вы посмотрите в вики, то увидите, что покрытие тестом является одной из возможных целей OpenCover.

Если вы посмотрите на разветвление, вы увидите ветку из Манкау - он первоначально указал, что собирается попытаться реализовать эту функцию, но я не знаю, как далеко он продвинулся или он отказался от своей попытки (то, что он представил, это просто небольшое повторное введение кода, позволяющего отслеживать звонки).

OpenCover отслеживает, отправляя идентификатор посещения и обновляя следующий элемент в массиве, который находится в общей памяти (совместно используемой профилировщиком (C++/native/32-64bit) и консолью (C#/managed/any-cpu)). Я предложил ему (и это будет мой подход, когда я к нему вернусь, если больше никто этого не делает, и именно поэтому я передаю данные о посещениях таким образом), что он может захотеть добавить маркеры в последовательность, чтобы указать, что он ввел / оставил определенный метод тестирования (возможно, отфильтрованный по атрибуту [TestMethod]), а затем при обработке результатов в консоли его можно каким-то образом добавить в модель. Многопоточность также может быть проблемой, так как это может вызвать чередование точек посещения для параллельных тестов.

Возможно, вы подумаете о другом подходе, и я с нетерпением жду ваших идей.

Другие вопросы по тегам