Визуализатор отладчика для генерации кода инициализатора объекта

У нас есть ошибка, которую нужно исправить, и, как любой хороший практик 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, но это может сработать.

Прежде чем я сам займусь этой проблемой, делал ли кто-нибудь что-нибудь подобное? Не возражаете поделиться фрагментом кода? Или кто-нибудь может предложить другой подход?

PS В моем случае тип объекта является подклассом абстрактного базового класса. Просто хотел упомянуть об этом.

12
задан JaredPar 17 November 2010 в 21:08
поделиться