通过在OpenCover中调用函数来过滤代码覆盖率

时间:2011-12-21 12:57:39

标签: code-coverage 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 个答案:

答案 0 :(得分:1)

使用OpenCover开发人员可能会更好地解决这个问题;嗯......那就是我,如果你看一下wiki,你会看到测试的覆盖范围是OpenCover的最终目标之一。

如果你看forking,你会看到mancau的一个分支 - 他最初表示他会尝试实现这个功能,但我不知道他已经取得了多大进展,或者他是否已经放弃了尝试(他提交的内容只是重新引入代码以允许跟踪调用)。

OpenCover通过发出访问标识符并更新驻留在共享内存中的数组中的下一个元素(在探查器(C ++ / native / 32-64bit)和控制台(C#/ managed / any-cpu)之间共享)来跟踪。我向他建议的是(当我接触它时,这将是我的方法,如果没有其他人这样做,这就是我以这种方式发出访问数据的原因)他可能想要在序列中添加标记以指示他已经输入/离开了一个特定的测试方法(可能在[TestMethod]属性上过滤),然后在控制台中处理结果时,可以以某种方式将其添加到模型中。线程化也可能是一个问题,因为这可能导致并行运行的测试访问点的交错。

也许你会想到一种不同的方法,我期待听到你的想法。