È possibile ottenere l'analisi della copertura del codice su un assembly di interoperabilità?

StackOverflow https://stackoverflow.com/questions/99520

Domanda

Ho posto questa domanda anche sui forum MSDN e non ho trovato una soluzione:

http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3686852&SiteID=1

Il problema di base qui, per come lo vedo io, è che un assembly di interoperabilità in realtà non contiene alcun IL che possa essere strumentato (ad eccezione forse di alcuni delegati).Quindi, anche se riesco a mettere insieme un progetto di prova che esercita il livello di interoperabilità, non riesco a capirlo quanti di quei metodi e proprietà che sto effettivamente chiamando.

Il piano B è scrivere un generatore di codice che crei una libreria di RCWW (Runtime Callable Wrapper Wrappers) e strumentarlo ai fini della copertura del codice.

Modificare:@Franci Penov,

Sì, è esattamente quello che voglio fare.I componenti COM fornitici costituiscono una libreria di una dozzina di DLL contenenti ca.3000 tipi.Utilizziamo quella libreria nella nostra applicazione e siamo incaricati di testare quel livello di interoperabilità, poiché il gruppo che ci fornisce le librerie esegue test minimi.La copertura del codice ci consentirebbe di garantire che tutte le interfacce e le coclassi siano esercitate.Questo è tutto quello che sto cercando di fare.Abbiamo progetti di test separati che esercitano il nostro codice gestito.

Sì, idealmente il team del server COM dovrebbe testare e analizzare il proprio codice, ma non viviamo in un mondo ideale e devo fornire un prodotto di qualità basato sul loro lavoro.Se riesco a produrre un rapporto di test indicante che ho testato l'80% delle loro interfacce di codice e che il 50% di queste non funziona come pubblicizzato, posso ottenere correzioni laddove è necessario apportare correzioni e non soluzioni alternative ai problemi.

Il livello simulato che hai citato sarebbe utile, ma alla fine non raggiungerebbe l'obiettivo di testare il livello di Interoperabilità stesso, e certamente non vorrei mantenerlo manualmente: siamo alla mercé dei ragazzi di COM in termini di modifiche alle interfacce.

Come accennato in precedenza, il passaggio successivo è generare wrapper per i wrapper e strumentarli a scopo di test.

È stato utile?

Soluzione

Per rispondere alla tua domanda: non è possibile strumentare gli assembly di interoperabilità per la copertura del codice.Contengono solo metadati e nessun codice eseguibile come dici tu stesso.

Inoltre, non vedo molto senso nel provare a coprire il codice dell'assembly di interoperabilità.Dovresti misurare la copertura del codice del codice che scrivi.

Dal thread del forum MDN che hai citato, mi sembra che tu voglia effettivamente misurare il modo in cui il tuo codice utilizza il componente COM.A meno che l'obiettivo del codice non sia enumerare e chiamare in modo esplicito tutti i metodi e le proprietà dell'oggetto COM, non è necessario misurare la copertura del codice.Sono necessari test di unità/scenario per garantire che il codice chiami i metodi/proprietà giusti al momento giusto.

Imho, il modo giusto per farlo sarebbe scrivere un livello fittizio per l'oggetto COM e verificare che stai chiamando tutti i metodi/proprietà come previsto.

Altri suggerimenti

Piano C:

usa qualcosa di simile Mono.Cecil per intrecciare semplici contatori di esecuzione nell'assembly di interoperabilità.Ad esempio, controlla questa sezione nel file FAQ:"Vorrei aggiungere alcune funzionalità di tracciamento a un assembly di cui non riesco a eseguire il debug, è possibile utilizzare Cecil?"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top