2015-06-20 54 views
0

我開始玩Roslyn。解析代碼和進行靜態分析相對容易。Roslyn - 動態(運行時)流程

我想知道是否有可能將它用於運行時分析?我想調用帶參數的方法並檢查執行了哪些分支。換句話說,我需要一個運行時執行計劃。 Roslyn可以做些什麼嗎?

+0

這裏您的目標是什麼?您可以重寫一個給定的方法來記錄關於哪些分支被採取的信息,然後運行該重寫的方法。這可以接受嗎?或者你是否需要運行實際的方法並檢查哪些分支被快速執行? – JoshVarty

+0

我想編寫一個計算測試覆蓋率的工具,以便我需要知道結果以及實際執行的內容(哪一行代碼)。如果任何一條線路出現故障,我也想知道它。 – user3733340

+0

我對il重新編譯做了同樣的處理;基本上你會爲每個分支增加一個靜態變量。工作得很好,所以你應該能夠基於ast樹來做同樣的事情。Ps:分支級別的代碼覆蓋率是恕我直言,比在線級別更好。 – atlaste

回答

0

我不知道最好的解決方案是什麼,我會推遲在大多數情況下SLak推薦的任何東西。

但是...

如果你想要與Roslyn做到這一點,你當然可以。事實上,在我的公司做類似的事情(我們將單元測試映射到它們調用的方法)。

下面是我們的方法的高層次概述。

  1. 重寫解決方案中的每個函數以記錄何時在某些全局靜態查找/數據結構中命中該函數。您可以逐個遍歷每個文件,並在每個文件上使用CSharpSyntaxRewriter。 (在你的情況下,你將在分支或逐行基礎上重寫)

  2. 一次運行一個單元測試,看看通過分析全局查找得到的結果。

  3. 在所有單元測試中彙總結果以瞭解您的完整代碼覆蓋率。

+0

您寧願單獨重寫每個文件。我之所以喜歡按照我在另一篇文章中描述的方式來做這件事,往往並不是所有的類都被單元測試覆蓋。我想寫一個VS插件,用戶可以點擊一個測試,它會顯示這個特定測試涵蓋的內容。根據上面的解決方案,即使他們沒有被測試覆蓋,我也必須重寫所有的類。 – user3733340

+0

你絕對可以按照自己的方式做,它可能只是很難找出你需要重寫哪些方法。 – JoshVarty

+0

還有一個你可能感興趣的開源持續測試框架:https://github.com/continuoustests/ContinuousTests – JoshVarty