【发布时间】:2011-05-11 16:18:46
【问题描述】:
我们有一个错误要修复,并且像任何优秀的 TDD 实践者一样,我想先编写一个失败的测试来表示该错误。该错误存在于一种将相当复杂的类型作为输入的方法中。只有当复杂类型设置了特定的属性值组合时,该错误才会重现。
到目前为止,我已经重现了该错误,并且在调试器中可以查看复杂类型的运行时值。现在我需要在单元测试的“排列”部分中创建该复杂类型,以便将其提供给单元测试的“行为”部分中的错误方法。
我可以手动编写一个大的对象初始化程序代码块,例如:
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);
那里没什么好看的。唯一的问题是“手动”部分——在我的例子中,复杂类型并不像上面的例子那么简单。
我还可以在调试器中使用任何内置调试器可视化工具查看对象。所以我想我会编写一个自定义的调试器可视化器,它会为我生成对象初始化代码。要使用它,我会在调试器中重现问题,打开 QuickWatch 窗口并选择我的自定义可视化工具。
另一种选择是编写自定义序列化实现,该实现将“序列化”为对象初始化代码块。使用它比打开 QuickWatch 窗口要困难一些,但它可以工作。
在我自己解决这个问题之前,有没有人做过这样的事情?介意分享一个代码sn-p吗?或者有人会建议另一种方法吗?
附:在我的例子中,对象的类型是抽象基类的子类。只是想提一下。
【问题讨论】:
-
我知道这个问题是在回来的时候被问到的,但我只是因为可以而回复。我已经实现它只是为了我的个人使用。详情mrvshah.wordpress.com/2011/10/06/…源代码github.com/mrvshah/CreateCodeDebugVisualizer
标签: c# visual-studio unit-testing debugging debuggervisualizer