У нас есть ошибка для исправления, и, как любой хороший практик TDD, я хочу написать неудачный тест, чтобы представить ошибку в первую очередь. Ошибка находится в методе, который вводит довольно сложный тип. Ошибка будет воспроизводиться только тогда, когда сложный тип имеет определенную комбинацию значений свойств.
До сих пор я воспроизвел ошибку, и в отладчике можно просмотреть значение времени выполнения сложного типа. Теперь мне нужно создать этот сложный тип в разделе "Упорядочить" моего unit test, чтобы я мог подавать его на метод багги в разделе "Действие" unit test.
Я могу написать блок кода инициализатора большого объекта вручную, например, следующий:
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, но это может сработать.
Прежде чем сам решить эту проблему, кто-нибудь сделал что-то подобное? Ум разделяет фрагмент кода? Или кто-нибудь предложит другой подход?
P.S. В моем случае тип объекта является подклассом абстрактного базового класса. Просто хотел сказать об этом.