2013-03-24 52 views
0

對於一個項目,我需要知道在單元測試結束時調用了多少個方法。 (或者類似於Visual Studio中的調用層次結構(不是在運行時),我已經爲此創建了一個測試項目,但是我只獲取在單元測試項目中調用的方法返回的結果。從單元測試中引用項目的C#StackTrace

因此,例如I有一個類庫與下面的類(組裝):

public class Program 
{ 
    public void A() 
    { 
     B(); 
     C(); 
    } 

    public void B() 
    { 

    } 

    public void C() 
    { 
     B(); 
     D(); 
    } 

    public void D() 
    { 

    } 
} 

而且一個單元測試(組裝)用以下試驗方法

[TestMethod] 
    public void TestMethod1() 
    { 
     StackTrace stackTrace = new StackTrace(); 
     new Program().A(); 
     int count = stackTrace.FrameCount; 
    } 

    [TestMethod] 
    public void TestMethod2() 
    { 
     StackTrace stackTrace = new StackTrace(); 
     new Program().C(); 
     int count = stackTrace.FrameCount; 
    } 

在這兩個單元測試計數= 12。當餘檢查stackTrace變量的屬性我只能看到稱爲單元測試程序集的方法。有沒有辦法將類庫程序集的調用包含在stackTrace中?

在此先感謝

+1

構建一個堆棧跟蹤對象將獲得構建它的代碼的堆棧跟蹤,它不會收集跟蹤它的代碼的堆棧跟蹤。這意味着在您的測試方法中,您將獲得堆棧跟蹤,以便在每個測試方法的第一行中構建堆棧跟蹤對象,其餘方法不會影響此堆棧跟蹤。 – 2013-03-24 12:42:53

+0

但是,當我將StackTrace的構造放置到testmethod的結尾時,結果仍然是一樣的... – mrtentje 2013-03-24 14:04:57

+0

是的,因爲它仍然只計算對**中**方法的調用。 – 2013-03-24 17:12:19

回答

0

您是否嘗試過使用覆蓋工具? (我會推薦dotCover

工具可以生成報告xml,json等,這樣你就可以輕鬆地解析它們並使用結果進行進一步的計算。

+0

這可以通過編程調用嗎? (沒有UI?) – mrtentje 2013-03-24 12:19:21

+0

不幸的是,目前沒有SDK,但是,您可以通過編程方式調用dotCover進程而沒有問題 – 2013-03-24 12:27:27

0

看起來你需要一個測試覆蓋工具。它將顯示測試程序集的哪些方法被調用。 VisualStudio內置了一個。

+0

我想要做的一件事是以編程方式獲取此信息,以便我可以使用此信息進行進一步計算。這可能嗎? – mrtentje 2013-03-24 11:52:24

+0

測試覆蓋工具將爲您做很多計算,提供有用的報告。如果你真的想攔截整個應用程序中的方法調用(以統計調用次數),你可以使用CLR的Profiling API來完成。但是你可能需要爲此寫很多代碼。 – alex 2013-03-24 11:56:11