Способ взять объект в окне просмотра и "Сценарий" его
У меня есть сценарий, где у меня есть довольно сложный объект, который я загружаю из базы данных.
Этот объект имеет несколько вложенных объектов. Во время отладки я нахожу экземпляр этого объекта, который хотел бы использовать в модульном тесте. Прямо сейчас я должен создать этот объект вручную. Поскольку это довольно сложно, мне нужно время.
Мое время модульного тестирования было бы лучше потратить, если бы был способ указать окну наблюдения выводить эту переменную в текстовое окно (или буфер обмена).
Кажется, вся необходимая информация находится в окне просмотра.
Я не ожидал бы, что он будет создан с использованием операторов или чего-то подобного, просто используйте информацию о классе и создайте new
операторы (вложенные столько уровней, сколько идет мой объект).
Есть ли такой инструмент там? (Если нет, может быть, я только что нашел способ сделать свое состояние?)
1 ответ
Нет такого инструмента, который я знаю... это очень сложно сделать, потому что:
- объекты могут иметь циклические ссылки и, следовательно, не имеют ограничений по глубине, на которую вы можете перейти
- могут быть ссылки на одноэлементные объекты
- Могут быть ссылки на объекты, которые принимают параметр в конструкторе, как он может знать, как построить объект?
- или ссылки на объекты, которые не имеют общедоступных конструкторов и вместо которых создаются фабрикой
- или ссылки на COM-объекты
- или ссылки на объекты, которые имеют смысл только во время работы: например, файловые потоки
Одно простое решение: сделать сериализуемый объект (например, xml или json), сериализовать его, скопировать сериализованную строку в ваш модульный тест, а затем десериализовать его в модульном тесте.
Не очень простое решение: реализовать визуализатор отладчика с источником объекта визуализатора: Debugger Visualizer и "Тип не помечен как сериализуемый"
Таким образом, вы можете создать окно и показать сериализованный объект... вам, вероятно, придется использовать отражение, чтобы прочитать все свойства объекта, дочерние объекты и так далее.