Visual Studio / 反思 / 序列化:我可以从调试会话导出值以将它们用于单元测试吗?
Visual Studio / Reflection / Serialization: Can I export values from a debug session to use them for unit testing?
我不得不编写几十行代码(参见此处:https://dotnetfiddle.net/RiVx2E)来生成几行示例数据。
在这种特定情况下,我可以通过这种方式手动导出输出变量(请参阅 Fiddler 上的完整代码):
new List {
{ IDMacroTab = 1, IDTab = 1, IDSIot = 2 }
{ IDMacroTab = 1, IDTab = 2, IDSIot 1}
{ IDMacroTab = 1, IDTab = 2, IDSIot = 2}
{ IDMacroTab = 1, IDTab = 2, IDSIot = 3}
{ IDMacroTab = 2, IDTab = 1, IDSIot = 1}
{ IDMacroTab = 2, IDTab = 1, IDSIot = 2 }
{ IDMacroTab = 2, IDTab = 2, IDSIot = 1}
{ IDMacroTab = 2, IDTab = 2, IDSIot = 2}
{ IDMacroTab = 2, IDTab = 2, IDSIot = 3}
{ IDMacroTab = 3, IDTab = 1, IDSIot = 1}
{ IDMacroTab = 3, IDTab = 1, IDSIot = 2}
{ IDMacroTab = 3, IDTab = 2, IDSIot = 1}
{ IDMacroTab = 3, IDTab = 2, IDSIot = 2}
{ IDMacroTab = 3, IDTab = 2, IDSIot = 3}};
是否有任何解决方法可以将对象序列化为填充它所需的 C# 代码行?
第一个解决方案(部分)
我发现这个问题非常有用,但仅适用于某种对象(即列表)
第二种解决方案
还有这个插件 ObjectExporter(2017 年最后更新;2018 年检查)
https://marketplace.visualstudio.com/items?itemName=OmarElabd.ObjectExporter
第三种解法:ObjectDumper.NET
我可能会为您提供其他解决方案。我在以前的项目中使用 OmarElabd/ObjectExporter 取得了不错的效果,但是某些类型存在问题(例如 DateTime 的序列化当时无法正常工作)。性能也是关键:一些生成的对象有 50k 行代码(是的,不要说这对于单个测试数据来说太大了 class,我知道,但是...)。
毕竟,我开始编写自己的 ObjectDumper,您可以在此处找到作为 NuGet 程序包 发布的内容。源代码托管在 github 上,请随时贡献。
https://www.nuget.org/packages/ObjectDumper.NET/
ObjectDumper.NET 的想法是,您基本上可以将 任何 C# 对象转储回 C# 初始化程序代码。与 ObjectExporter(它是一个 Visual Studio 插件)相比,ObjectDumper 是作为 NuGet 包安装的。这允许在 运行时 使用 ObjectDumper - 不仅在代码创建时。
用法示例:
[Fact]
public void SerializeObjectsToInitializerCode()
{
// Create C# object
var testObjects = new List<TestObject>
{
new TestObject {IDMacroTab = 1, IDTab = 1, IDSIot = 2},
new TestObject {IDMacroTab = 1, IDTab = 2, IDSIot = 1},
new TestObject {IDMacroTab = 1, IDTab = 2, IDSIot = 2}
};
// Pass it to ObjectDumper, choose DumpStyle.CSharp to generate C# initializer code
var dump = ObjectDumper.Dump(testObjects, DumpStyle.CSharp);
// Print to console, write to file, etc...
_testOutputHelper.WriteLine(dump);
}
我不得不编写几十行代码(参见此处:https://dotnetfiddle.net/RiVx2E)来生成几行示例数据。
在这种特定情况下,我可以通过这种方式手动导出输出变量(请参阅 Fiddler 上的完整代码):
new List {
{ IDMacroTab = 1, IDTab = 1, IDSIot = 2 }
{ IDMacroTab = 1, IDTab = 2, IDSIot 1}
{ IDMacroTab = 1, IDTab = 2, IDSIot = 2}
{ IDMacroTab = 1, IDTab = 2, IDSIot = 3}
{ IDMacroTab = 2, IDTab = 1, IDSIot = 1}
{ IDMacroTab = 2, IDTab = 1, IDSIot = 2 }
{ IDMacroTab = 2, IDTab = 2, IDSIot = 1}
{ IDMacroTab = 2, IDTab = 2, IDSIot = 2}
{ IDMacroTab = 2, IDTab = 2, IDSIot = 3}
{ IDMacroTab = 3, IDTab = 1, IDSIot = 1}
{ IDMacroTab = 3, IDTab = 1, IDSIot = 2}
{ IDMacroTab = 3, IDTab = 2, IDSIot = 1}
{ IDMacroTab = 3, IDTab = 2, IDSIot = 2}
{ IDMacroTab = 3, IDTab = 2, IDSIot = 3}};
是否有任何解决方法可以将对象序列化为填充它所需的 C# 代码行?
第一个解决方案(部分)
我发现这个问题非常有用,但仅适用于某种对象(即列表)
第二种解决方案
还有这个插件 ObjectExporter(2017 年最后更新;2018 年检查)
https://marketplace.visualstudio.com/items?itemName=OmarElabd.ObjectExporter
第三种解法:ObjectDumper.NET
我可能会为您提供其他解决方案。我在以前的项目中使用 OmarElabd/ObjectExporter 取得了不错的效果,但是某些类型存在问题(例如 DateTime 的序列化当时无法正常工作)。性能也是关键:一些生成的对象有 50k 行代码(是的,不要说这对于单个测试数据来说太大了 class,我知道,但是...)。
毕竟,我开始编写自己的 ObjectDumper,您可以在此处找到作为 NuGet 程序包 发布的内容。源代码托管在 github 上,请随时贡献。 https://www.nuget.org/packages/ObjectDumper.NET/
ObjectDumper.NET 的想法是,您基本上可以将 任何 C# 对象转储回 C# 初始化程序代码。与 ObjectExporter(它是一个 Visual Studio 插件)相比,ObjectDumper 是作为 NuGet 包安装的。这允许在 运行时 使用 ObjectDumper - 不仅在代码创建时。
用法示例:
[Fact]
public void SerializeObjectsToInitializerCode()
{
// Create C# object
var testObjects = new List<TestObject>
{
new TestObject {IDMacroTab = 1, IDTab = 1, IDSIot = 2},
new TestObject {IDMacroTab = 1, IDTab = 2, IDSIot = 1},
new TestObject {IDMacroTab = 1, IDTab = 2, IDSIot = 2}
};
// Pass it to ObjectDumper, choose DumpStyle.CSharp to generate C# initializer code
var dump = ObjectDumper.Dump(testObjects, DumpStyle.CSharp);
// Print to console, write to file, etc...
_testOutputHelper.WriteLine(dump);
}