9

我有一个场景,我有一个相当复杂的对象,我从数据库中加载。一种在观察窗口中获取对象的方法和“Script”脚本

该对象具有多个嵌套对象。在我调试的时候,我发现我想在单元测试中使用这个对象的一个​​实例。现在我必须手动创建这个对象。由于它相当复杂,需要我一段时间。

如果有方法告诉观察窗口将此变量输出到文本窗口(或剪贴板),我的单元测试时间将会更好。

看来所有需要的信息都在监视窗口中。我不希望它创建使用语句或任何这样的事情,只是使用它所具有的类信息并创建new语句(与我的对象一样嵌套多个级别)。

这里有没有这样的工具? (如果没有,也许我只是找到了一种方法,使我的运气吗?)

+1

尝试**即时**窗口并在遍历对象时输出到** debug **。为了让你的生活更轻松,你也可以准备好自己的遍历方法,然后在即时窗口中调用它并输出到调试。在它的同时,将其转换为JSON,然后在测试代码中使用该字符串将其解析回具体实例。从JSON字符串。可能是最简单的解决方案。 –

+0

但是,你当然可以去找它并编写一个VS扩展,它会添加上下文菜单项,以便在监视窗口中右键单击某个对象,并且会说**将JSON放在剪贴板**上。我相信很多人会很乐意安装它。正是出于您提供的相同原因。 –

+0

+1我的问题确实如此。 – adamdport

回答

2

有没有这样的工具,我知道......这是非常复杂的这样做是因为:

  • 对象可能有循环引用,因此对深度没有限制你可以去
  • 有可能是单引号对象引用
  • 有可能是对构造函数有参数的对象的引用,它怎么知道如何构造对象?
  • 或引用有没有公共构造,并通过出厂内置对象,而不是
  • 或引用COM对象
  • 或引用,使仅在运行方向的物体:例如文件流

一个简单的解决方案:使对象可序列化(例如xml或json),序列化它,将序列化的字符串复制到您的单元测试,然后在单元测试中反序列化它。

没那么容易的解决方案:实现一个调试器可视,具有可视化对象源: Debugger Visualizer and "Type is not marked as serializable"

这样,你可以创建一个窗口,并显示序列化对象......你可能将不得不使用反射来读取所有对象属性和子对象等等。

+0

可以避免周期......但会消耗更多内存......;) –

+0

避免周期是一个复杂因素...但我列出了一些可能导致无法创建类似工具的其他事情。 –

+1

那你怎么能够序列化它呢?序列化工具可以像任何自定义代码一样完成整个魔术。无论是XML,JSON还是任何其他序列化 –

相关问题