Come testare l'unità ArcObjects con Mocking?


10

Sono un grande fan dei test unitari, ma uso ancora un FGDB per sfruttare le funzionalità per l'esecuzione dei test unitari quando si utilizza il framework ArcObjects.

Qualcuno sta usando con successo la beffa contro pensa come IFeature, IGeometry, IWorkspace ecc. Se è così, mi piacerebbe vedere alcuni esempi di come lo stai facendo. Non mi interessa davvero quale quadro beffardo usi, solo vedere come lo stai facendo sarebbe molto apprezzato.

Il problema che vedo è che devi tagliare e tagliare tra così tante interfacce sullo stesso oggetto, che il sovraccarico di creare un oggetto fittizio rappresentativo sarebbe enorme.


Per chiunque non sia a conoscenza del derisione (come me), consulta questo link. Roba interessante stackoverflow.com/questions/300177/…
Simon,

Risposte:


14

Su un grande progetto, siamo riusciti abbastanza bene a isolare il codice ArcObjects dalla nostra logica aziendale. Questa è generalmente la strada da percorrere, direi, piuttosto che tentare di deridere tutto, anche se è possibile usare framework di derisione per ottenere un po 'di strada.

Chiediti, perché senti il ​​bisogno di deridere. In genere, è a causa di un'astrazione mancante. Pensa alle piccole responsabilità e minimizza la superficie dell'enorme, brutto mostro ArcObject. Evita di trascinare i tipi di ArcObject solo perché alcuni aspetti di essi sono necessari da qualche parte.

Posso dare un esempio concreto dal nostro progetto. Una parte del codice sembrava dipendere da IMxDocument. Si è scoperto che l'unico motivo era che la vista attiva doveva essere aggiornata. Quindi abbiamo creato un'interfaccia IViewRefresher invece e ci abbiamo lavorato solo; facile da deridere e testare. Inoltre, rende l' intento del codice molto più chiaro e rimuove la tentazione che qualcuno inizi a fare cose divertenti con il documento IMx che non avrebbero dovuto fare perché tutto ciò che volevamo fare qui era aggiornare. Lo stesso esercizio può essere fatto con molto codice ArcObjects.

Inoltre, abbiamo avvolto tutti gli accessi alle classi di funzionalità in wrapper di tipo sicuro, fornendo nuovamente codice beffardo che protegge il codice aziendale da ArcObjects.

Abbiamo discusso nemmeno usando i tipi di geometria di ArcObjects, ma attualmente consentiamo che tali interfacce possano essere utilizzate direttamente nel nostro codice. (Tuttavia, è consentita solo la conoscenza dell'interfaccia e tutte le istanze di geometrie utilizzano la nostra fabbrica di geometrie.)

In sintesi, non sto disincoraggiando il beffardo ma incoraggerei il deridere a un diverso livello di astrazione rispetto ad ArcObjects.


ottima risposta Cumbayah. Ho anche molte difficoltà a testare il codice AO. L'esempio che hai dato è stato grandioso (IViewRefresher) e potrei applicarlo al mio lavoro qui. Puoi dare ulteriori esempi?
George Silva,

Grazie Cumbayah. Questo è ciò che attualmente faccio su progetti di medie e grandi dimensioni, creando un assieme separato per astrarre tutta l'implementazione AO. È questa astrazione che vorrei testare senza ricorrere ai dati memorizzati, sia che si tratti di aree di lavoro XML o di geodatabase di un tipo o di un altro. Trovo che di tanto in tanto, con dati diversi, emergano nuovi problemi, che devono quindi essere creati per i test, il che richiede ulteriori dati di test. Con il passare del tempo ho così tanti dati di test per tutti i casi di test, che i progetti diventano enormi per la gestione e lo spostamento, lasciati scaricare dal mio server di build automatizzato.
BlinkyBill,

Cumbayah, sembra incredibile. Mi piacerebbe alcuni esempi. Hai mai pensato di presentare qualcosa in merito a una delle conferenze ESRI? Penso che la comunità ESRI / GIS stia morendo per questo tipo di cose. Mi piacerebbe vedere alcuni movimenti open source iniziare per testare / deridere ArcObjects.
Keith G,

Questo è un vecchio argomento che capisco, ma ogni possibilità che possiamo ottenere un campione della tua "fabbrica di geometria"? Sto cercando di spostare la mia organizzazione nella direzione dei test unitari, ma mi sto impiccando sulla scimmia ArcObjects.
Luca,

4

I test unitari per gli sviluppatori Esri di Dave Bouwman e Brian Noyle sono un ottimo punto di partenza, soprattutto da quando hanno lanciato del codice da guardare.


Grazie per il puntatore bwreilly. Quello che Dave fa è semplicemente usare le rappresentazioni XML delle funzionalità. Quindi mentre aiuta, fa ancora affidamento sulla memorizzazione dei dati per i test, che è ciò che sto cercando di scappare.
BlinkyBill,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.