Visual Studio / Reflection / Serialization: можно ли экспортировать значения из сеанса отладки, чтобы использовать их для модульного тестирования? - PullRequest
0 голосов
/ 12 октября 2018

Мне пришлось написать множество десятков строк кода (см. Здесь: 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 #, необходимые для его заполнения?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Трехстороннее решение: ObjectDumper.NET

У меня может быть другое решение для вас.Я использовал OmarElabd / ObjectExporter в предыдущих проектах с хорошими результатами, но были проблемы с некоторыми типами (например, сериализация DateTime не работала должным образом в то время).Производительность также была ключевой: некоторые сгенерированные объекты имели размер кода в 50 тысяч строк (да, я не знаю, что он слишком велик для одного класса тестовых данных, я знаю, но ...).

Послевсе, я начал писать свой собственный 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);
}

enter image description here

0 голосов
/ 09 ноября 2018

Первое решение (частичное)

Я нашел этот вопрос, который может быть довольно полезным, но только для какого-то объекта (например, списков)

В Visual Studio при отладкеC # код, я могу легко экспортировать список или словарь в XML, CSV или текстовом формате?

enter image description here

enter image description here

Второе решение

А также этот плагин ObjectExporter (последнее обновление 2017; проверено на 2018)

https://marketplace.visualstudio.com/items?itemName=OmarElabd.ObjectExporter

enter image description here

...