2011-12-21 44 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