У нас есть ошибка, которую нужно исправить, и, как и любой хороший специалист по 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, но это может сработать.
Прежде чем я сам решу эту проблему, кто-нибудь делал что-то подобное? Хотите поделиться фрагментом кода? Или кто-нибудь посоветует другой подход?
P.S. В моем случае тип объекта является подклассом абстрактного базового класса. Просто хотел упомянуть об этом.