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