Способ взять объект в окне просмотра и заскриптовать его

У меня есть сценарий, в котором у меня есть довольно сложный объект, который я загружаю из базы данных.

Этот объект имеет несколько вложенных объектов. Во время отладки я нашел экземпляр этого объекта, который хотел бы использовать в модульном тесте. Сейчас мне нужно создать этот объект вручную. Поскольку это довольно сложно, это занимает у меня некоторое время.

Мое время модульного тестирования было бы лучше потрачено, если бы был способ сказать окну просмотра вывести эту переменную в текстовое окно (или в буфер обмена).

Кажется, вся необходимая информация находится в окне просмотра.

Я бы не ожидал, что он создаст операторы использования или что-то в этом роде, просто используйте информацию о классе, которая у него есть, и создайте операторы new (вложенные столько уровней, сколько идет мой объект).

Есть ли такой инструмент там? (Если нет, может быть, я просто нашел способ разбогатеть?)


person Vaccano    schedule 28.11.2012    source источник
comment
Попробуйте открыть немедленное окно и вывести его в debug при обходе вашего объекта. Чтобы облегчить себе жизнь, вы также можете подготовить этот метод обхода, а затем вызвать его в непосредственном окне, и он будет выведен для отладки. И пока это происходит, преобразуйте его в JSON, а затем используйте эту строку в своем тестовом коде, чтобы проанализировать ее обратно в конкретный экземпляр. Из строки JSON. Пожалуй, самое простое решение.   -  person Robert Koritnik    schedule 28.11.2012
comment
Но вы, конечно, можете пойти на это и написать расширение VS, которое добавит пункт контекстного меню для щелчка правой кнопкой мыши по объекту в окне просмотра и скажет Поместить JSON в буфер обмена. Я уверен, что многие были бы рады установить его. Именно по той причине, которую вы указали.   -  person Robert Koritnik    schedule 28.11.2012
comment
+1 Мой вопрос ТОЧНО.   -  person adamdport    schedule 15.04.2014


Ответы (1)


Я не знаю такого инструмента... это очень сложно сделать, потому что:

  • объекты могут иметь циклические ссылки и, следовательно, не имеют ограничений на глубину, на которую вы можете перейти.
  • могут быть ссылки на одноэлементные объекты
  • могут быть ссылки на объекты, которые принимают параметр в конструкторе, как он может знать, как построить объект?
  • или ссылки на объекты, которые не имеют общедоступных конструкторов и вместо этого создаются фабрикой
  • или ссылки на COM-объекты
  • или ссылки на объекты, которые имеют смысл только во время работы: файловые потоки, например

Одно простое решение: сделать объект сериализуемым (например, в xml или json), сериализовать его, скопировать сериализованную строку в модульный тест, а затем десериализовать ее в модульном тесте.

Не очень простое решение: реализовать визуализатор отладчика с источником объекта визуализатора: Визуализатор отладчика и тип не помечен как сериализуемый

Таким образом, вы можете создать окно и показать сериализованный объект... вам, вероятно, придется использовать отражение для чтения всех свойств объекта, дочерних объектов и т.д.

person Miguel Angelo    schedule 28.11.2012
comment
Циклов можно избежать... но они потребляют немного больше памяти... ;) - person Robert Koritnik; 28.11.2012
comment
Избежать циклов сложно... но я перечислил некоторые другие вещи, которые могут сделать невозможным создание такого инструмента. - person Miguel Angelo; 28.11.2012
comment
Так как же тогда вы сможете его сериализовать? Инструменты сериализации делают всю магию так же, как и любой пользовательский код. Будь то XML, JSON или любая другая сериализация - person Robert Koritnik; 28.11.2012
comment
Сериализация не может работать с неконструируемыми объектами... им нужно ручное кодирование для работы, например, с объектами, созданными фабрикой. - person Miguel Angelo; 28.11.2012
comment
Хорошие моменты. Я понимаю, что создать инструмент, который будет защищать от дурака, было бы невозможно. Но я был бы счастлив, если бы это было написано так, как если бы все конструкторы были общедоступными и не имели параметров. Если есть сложные конструкторы, я могу вернуться и добавить фабрики или параметры по мере необходимости. - person Vaccano; 29.11.2012