2011-12-21 42 views
1

我有一些为MsTest编写的集成测试。集成测试具有以下结构:通过在OpenCover中调用函数来过滤代码覆盖率

[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是...好..开放。但我真的不知道从哪里开始。任何人都可以将我指向正确的方向吗?

+0

你决定实现这个功能吗? – 2012-01-06 00:30:09

回答

1

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

如果你看看forking,你会看到mancau的一个分支 - 他最初表示他会试图实现这个功能,但我不知道他已经进步了多少,或者他是否放弃了他的尝试(什么他提交的代码只是一小段重新引入的代码,以允许跟踪呼叫)。

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

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

+0

这看起来像我想要的,但不幸的是,我意识到它超出了我,因为我没有足够的C++经验来尝试自己实现这一点。 – cvlad 2012-01-20 12:38:49

+0

不用担心,我自己开始了,release3目前支持nunit – 2012-01-20 19:04:40