Visual Studio调试时复制对象值并粘贴为填充类对象的实现方法
如何在Visual Studio中快速将调试对象转化为单元测试的测试数据
绝对有办法实现这个需求!我自己在写单元测试的时候也经常这么干,省了超多手动挨个赋值的时间。下面给你分享几个实用的方案,从自带功能到第三方扩展都有:
方案一:利用VS自带的“复制为JSON/XML” + 反序列化
这是最不需要额外工具的方法,完全依赖Visual Studio自带功能:
- 调试时,在局部变量窗口或者监视窗口找到你要复制的对象(比如
orderHeader实例) - 右键点击该对象,选择「复制为 JSON」(或者XML,看你偏好哪种格式)
- 回到单元测试代码中,用序列化库把复制的字符串反序列化成目标对象。举个C#的例子:
// 粘贴你从调试窗口复制的JSON字符串 string orderHeaderJson = @"{""OrderId"":123,""CustomerName"":""John Doe"",""OrderDate"":""2024-05-20T14:30:00""}"; // 用System.Text.Json反序列化(.NET Core/.NET 5+自带) OrderHeader testOrder = System.Text.Json.JsonSerializer.Deserialize<OrderHeader>(orderHeaderJson); // 如果是.NET Framework,可以用Newtonsoft.Json: // OrderHeader testOrder = Newtonsoft.Json.JsonConvert.DeserializeObject<OrderHeader>(orderHeaderJson);
- 小提示:如果对象有嵌套属性、私有字段或者无法序列化的成员,可以调整序列化配置(比如
JsonSerializerOptions.IncludeFields),或者提前在调试窗口展开对象,只复制需要的属性部分。
方案二:用VS扩展直接生成对象初始化代码
这个方法更直接,能一步生成可直接使用的C#对象初始化代码,推荐给处理复杂对象的场景:
- 先在Visual Studio的扩展市场安装Object Exporter(或者类似的扩展,比如CodeClipse Object Exporter)
- 调试时选中目标对象,右键选择「Export to Code」
- 在弹出的窗口里选择语言(C#)和输出格式(对象初始化器),复制生成的代码到单元测试中,比如生成的代码会是这样:
var orderHeader = new OrderHeader { OrderId = 123, CustomerName = "John Doe", OrderDate = new DateTime(2024, 5, 20, 14, 30, 0), // 嵌套的子对象也会被自动生成 OrderItems = new List<OrderItem> { new OrderItem { ItemId = 456, Quantity = 2, Price = 99.99 } } };
- 优势:不需要处理序列化的各种细节,生成的代码直接就能用,还能自定义输出格式(比如匿名对象、DTO等)。
方案三:手动复制属性(适合简单对象)
如果你的对象结构很简单,也可以直接在调试窗口展开对象,逐个复制属性值,手动写对象初始化代码。比如看到OrderId是123,CustomerName是"John Doe",直接写:
var orderHeader = new OrderHeader { OrderId = 123, CustomerName = "John Doe" };
这个方法虽然笨,但胜在不需要任何工具,适合快速处理简单对象。
内容的提问来源于stack exchange,提问作者crichavin
相关产品推荐
相关产品推荐

