1

我有一些为 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 是……嗯……是开放的。但我真的不知道从哪里开始。谁能指出我正确的方向?

4

1 回答 1

1

您可能会更好地与 OpenCover 开发人员一起解决这个问题;嗯...那将是我,如果您查看wiki,您会发现测试覆盖率是 OpenCover 的最终目标之一。

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

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

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

于 2011-12-22T00:08:45.247 回答