9

Ho uno scenario in cui ho un oggetto abbastanza complesso che carico da un database.Un modo per prendere un oggetto nella finestra di controllo e "Script" è

Questo oggetto ha diversi oggetti nidificati. Mentre eseguo il debug, trovo un'istanza di questo oggetto che vorrei utilizzare in un test unitario. In questo momento devo creare questo oggetto manualmente. Dal momento che è abbastanza complesso, mi ci vuole un po '.

Il tempo di test del mio apparecchio sarebbe stato speso meglio se ci fosse un modo per dire alla finestra di controllo di emettere questa variabile in una finestra di testo (o negli Appunti).

Sembra che tutte le informazioni necessarie siano nella finestra di controllo.

Non mi aspetto che crei usando istruzioni o qualsiasi cosa del genere, basta usare le informazioni di classe che ha e creare le istruzioni new (nidificate a tutti i livelli del mio oggetto).

Esiste uno strumento del genere? (Se non forse ho appena trovato un modo per rendere la mia fortuna?)

+1

Prova ** finestra ** immediata e invia a ** debug ** mentre attraversi il tuo oggetto. Per semplificarti la vita, puoi anche prepararti questo metodo di attraversamento e poi chiamarlo nella finestra immediata e verrebbe inviato al debug. E mentre lo fai, convertilo in JSON e poi usa quella stringa nel tuo codice di test per analizzarlo nuovamente all'istanza concreta. Dalla stringa JSON. Probabilmente la soluzione più semplice. –

+0

Ma puoi ovviamente provarlo e scrivere un'estensione VS che aggiungerebbe voce di menu contestuale per fare clic con il pulsante destro del mouse su un oggetto nella finestra di visualizzazione e direi ** Metti JSON negli Appunti **. Sono sicuro che molti sarebbero felici di installarlo. Esattamente per la stessa ragione che hai fornito. –

+0

+1 La mia domanda ESATTAMENTE. – adamdport

risposta

2

Non esiste strumento che lo so ... è molto complicato fare questo perché:

  • oggetti possono avere riferimenti ciclici , e quindi non hanno alcun limite per la profondità si può andare
  • ci potrebbero essere i riferimenti a oggetti Singleton
  • ci potrebbero essere i riferimenti agli oggetti che prendono il parametro sul costruttore, come potrebbe sapere come costruire l'oggetto?
  • o riferimenti a oggetti che non hanno costruttori pubblici, e sono costruite da una fabbrica invece
  • o riferimenti a COM oggetti
  • o riferimenti a oggetti che hanno un senso solo durante l'esecuzione: flussi di file, ad esempio

Una soluzione semplice: rendere serializzabile l'oggetto (su xml o json ad esempio), serializzarlo, copiare la stringa serializzata sul test dell'unità e quindi deserializzare nel test dell'unità.

Non è così facile soluzione: implementare un visualizzatore debugger, con una fonte oggetto visualizzatore: Debugger Visualizer and "Type is not marked as serializable"

questo modo è possibile creare una finestra, e mostrare l'oggetto serializzato ... probabilmente si dovrà utilizzare riflessione per leggere tutte le proprietà dell'oggetto e gli oggetti figlio e così via.

+0

I cicli possono essere evitati ... ma richiedono un po 'più di memoria ...;) –

+0

Evitare i cicli è una complicazione ... ma ho elencato alcune altre cose che potrebbero rendere impossibile la creazione di uno strumento come quello. –

+1

Allora, come mai sarai in grado di serializzarlo? Gli strumenti di serializzazione fanno l'intera magia allo stesso modo di qualsiasi codice personalizzato. Che si tratti di XML, JSON o qualsiasi altra serializzazione –