我一直在努力實現OpenCover在本地構建的一些我工作的各種API,以便爲我的團隊建立一個體面的測試報告結構。當試圖對我的NUnit測試運行覆蓋率時,我發現從生成的報告中省略了一些更重要的類,並且將訪問節點的各個對象設置爲false。OpenCover沒有在密封類上產生覆蓋率結果
我仍然收到適當的NUnit結果,並且知道我期望的覆蓋率結果是由於針對Visual Studio的內置工具進行驗證所致。這只是OpenCover無法正確報告。
這些對象中的任何一個都沒有報告,因爲我發現它們的共同線程似乎是密封。我猜OpenCover正在跳過這些類,併爲其報告結構使用某種反射類型,但由於我在一個非常嚴格的內部網絡上,我沒有機會查看源代碼來證明這一點。
有人遇到類似的事情或有任何提示來解決這個問題?當然,我不能從我的課程中刪除密封的關鍵字,因爲他們需要它。
編輯*這是我寫文章讚揚了類似的例子:
using System.Text;
using NUnit.Framework;
namespace OpenCover.Sealed.Test
{
using Helpers;
[TestFixture]
public class UtilityTest
{
[Test, Owner("Patrick Ramser")]
public void ConcatTest()
{
Utility utility = Utility.CreateNewUtility();
string concatMsg = utility.Concat
("1:{0} 2:{1} 3:{2}", "FIRST", "SECOND", "THIRD");
Assert.AreEqual
(concatMsg, "1:FIRST 2:SECOND 3:THIRD", "Wrong message returned!");
}
}
}
namespace OpenCover.Sealed.Helpers
{
public sealed class Utility
{
internal Utility()
{
}
public static Utility CreateNewUtility()
{
return new Utility();
}
public string Concat(string message, params string[] lstStrings)
{
StringBuilder builder = new StringBuilder(message);
for (int i = 0; i < lstStrings.Length; i++)
{
builder.Replace("{" + i + "}", lstStrings[i]);
}
return builder.ToString();
}
}
}
當同時使用NUnit的和新的試驗裝置,我只是引用:
D:\exes\OpenCover\OpenCover.Console.exe
-target:"D:\TestRunners\nunit.console.exe"
-targetargs:"/nologo /domain=Single /xml=C:\NUnit\Artifacts\nunit-results.xml
D:\OpenCover.Sealed.Test\bin\Debug\OpenCover.Sealed.Test.dll"
-output:"C:\NUnit\Artifacts\coverage.xml"
-register
-filter:"+[OpenCover.Sealed*]*"
-returntargetcode
沒有空格或格式化爲我運行的批處理腳本,我只是將它限制在行之間以使其更具可讀性。
內部結構是否會造成任何問題?
OpenCover沒有密封類的已知問題,您是否能夠提供複製問題的示例。如果你使用nunit你使用的是什麼參數?你有沒有試過'-noisolation'開關?或者,您也可以嘗試使用'-mergebyhash'開關合並來自多個位置的覆蓋率結果。 –
我的NUnit參數沒有什麼特別之處,只是:「/ nologo/domain = Single /xml=C:\NUnit\Artifacts\nunit-results.xml」。結果集也填寫正確,並有正確的結果顯示通過我的測試。 我對OpenCover本身使用-returntargetcode,-register和-filter屬性,它們看起來工作正常。實現沒有隔離和哈希合併似乎沒有影響我注意到的任何事情。我仍然相信這是程序化的東西,但我不能說出它是什麼,因爲OpenCover只是跳過代碼。 –
嗨帕特里克,我已經把你的示例代碼,我不能重複你的問題(密封類的100%覆蓋率) - 我已將我編譯的項目放在[dropbox](https://dl.dropboxusercontent.com/u/ 16543630/OpenCover/Sealed.zip)供您查看。 我已經使用了相同的參數,但應用程序位置不同,我也使用了-register:user(但不應該有所作爲)。 程序集是否進行了任何可能影響opencover注入其代碼的修改(混淆),這些修改是基於從PDB收集的代碼? –