Фильтрация покрытия кода путем вызова функции в 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]), а затем при обработке результатов в консоли его можно каким-то образом добавить в модель. Многопоточность также может быть проблемой, так как это может вызвать чередование точек посещения для параллельных тестов.
Возможно, вы подумаете о другом подходе, и я с нетерпением жду ваших идей.