簡體   English   中英

Debugger Visualizer生成Object Initializer代碼

[英]Debugger Visualizer to generate Object Initializer code

我們有一個需要修復的bug,就像任何優秀的TDD從業者一樣,我想編寫一個失敗的測試來代表bug。 該錯誤在一個方法中,它采用相當復雜的類型作為輸入。 只有當復雜類型具有特定的屬性值組合時,該錯誤才會重現。

到目前為止,我已經重現了該錯誤,並且在調試器中,可以查看復雜類型的運行時值。 現在我需要在單元測試的“排列”部分中創建該復雜類型,以便我可以將其提供給單元測試的“Act”部分中的buggy方法。

我可以手工編寫一個大對象初始化代碼塊,如下所示:

var cats =
    new List<Cat>
        {
            new Cat {Name = "Sylvester", Age = 8},
            new Cat {Name = "Whiskers", Age = 2}
        };

甚至是這樣的:

var cats = new List<Cat>();
var cat1 = new Cat();
cat1.Name = "Sylvester";
cat1.Age = 8;
cats.Add(cat1);
var cat2 = new Cat();
cat2.Name = "Whiskers";
cat2.Age = 2;
cats.Add(cat2);

沒有什么花哨的。 唯一的問題是“手工”部分 - 在我的情況下復雜類型並不像上面的例子那樣微不足道。

我還可以在調試器中使用任何內置調試器可視化工具查看對象。 所以我想我會編寫一個自定義Debugger Visualizer,它將為我生成對象初始化代碼。 要使用它,我會在調試器中重現該問題,拉出QuickWatch窗口並選擇我的自定義可視化工具。

另一種選擇是編寫一個自定義序列化實現,它將“序列化”到一個對象初始化代碼塊。 使用它比僅僅拉動QuickWatch窗口要困難一些,但這可能有效。

在我自己解決這個問題之前,有沒有人做過這樣的事情? 介意分享一個代碼片段? 或者有人會建議另一種方法嗎?

PS在我的例子中,對象的類型是抽象基類的子類。 只是想提一下。

這是一個名為Object Exporter的工具,它可以完全滿足您的需求,它將從調試窗口中的任何對象生成C#初始化代碼:

https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f

博客文章更多信息:

http://www.omarelabd.net/exporting-objects-from-the-visual-studio-debugger/

我不知道提供您正在尋找的行為的任何現有功能/功能。 但是編寫Visualizer來為給定對象生成代碼的想法對於簡單的對象類型來說似乎是合理的:那些由基本類型的屬性組成。 一旦超越這個任務變得越來越困難。

在可視化工具中,您可以訪問相關對象,並可以使用反射等技巧來獲取成員。 原始類型重復表示成員的值作為代碼: intstring等....這對於非原始類型來說要困難得多,因為該過程變得遞歸並且您需要考慮對象周期。

如果這對您有用,請參閱Debugger Visualizers的快速教程

總而言之,只是手寫每個場景可能更容易:(

這些建議不起作用。 閱讀第一行

您可以為除Object或Array之外的任何托管類的對象編寫自定義可視化工具。

http://msdn.microsoft.com/en-us/library/e2zc529c.aspx

有你的答案。 如果我正確閱讀,則無法通過可視化工具實現。 瘸子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM