Frage

Ich habe diese Frage auf den MSDN-Foren auch gefragt, über und haben keine Lösung gefunden:

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

Das grundlegende Problem hier wie ich es sehe, ist, dass eine Interop-Assembly tatsächlich keine IL enthalten, die (außer vielleicht ein paar Delegierten) instrumentiert werden kann. Also, auch wenn ich zusammen ein Testprojekt setzen kann, die die Interop-Schicht ausübt, kann ich keinen Sinn für bekommen, wie viele von diesen Methoden und Eigenschaften ich eigentlich Aufruf bin.

Plan B zu gehen und einen Code-Generator zu schreiben, die eine Bibliothek von RCWWs (Runtime Callable Wrapper Wrappers) und Instrumente schafft, dass für die Zwecke der Codeabdeckung.

Edit: @Franci Penov,

Ja, das ist genau das, was ich tun möchte. Die COM-Komponenten an uns geliefert um eine Bibliothek von einigen Dutzend DLLs bilden ca. enthält. 3000 Arten. Wir verbrauchen diese Bibliothek in unserer Anwendung und sind mit der Prüfung geladen, die Interop-Schicht, da die Gruppe uns die Bibliotheken liefert minimale Tests der Fall ist. Code Coverage würde es uns ermöglichen, um sicherzustellen, dass alle Schnittstellen und Co-Klassen ausgeübt werden. Das ist alles, was ich zu tun habe versucht. Wir haben separate Testprojekte, die unseren eigenen verwalteten Code ausüben.

Ja, idealerweise sollte der COM-Server-Team testen und ihren eigenen Code zu analysieren, aber wir leben nicht in einer idealen Welt und ich muss ein qualitativ hochwertiges Produkt liefern auf der Grundlage ihrer Arbeit. Wenn kann einen Prüfbericht erzeugen darauf hinweist, dass ich 80% ihrer Code-Schnittstellen und 50% der Befragten arbeiten nicht wie beworben getestet habe, kann ich Korrekturen getan, wo Korrekturen getan werden müssen, und nicht die Probleme umgehen.

Die Mock-Ebene, die Sie erwähnt wäre nützlich, aber letztlich nicht das Ziel, die Interop-Schicht der Prüfung selbst zu erreichen sein würde, und ich möchte auf keinen Fall mit der Hand zu Aufrechterhaltung - wir von der Gnade des COM sind Jungs in Bezug auf Änderungen an den Schnittstellen.

Wie ich schon oben erwähnt -. Der nächste Schritt ist zu Testzwecken solche Wrapper für den Wrapper und Instrument zu erzeugen

War es hilfreich?

Lösung

Um Ihre Frage zu beantworten - es ist nicht möglich Instrument Interopassemblys für Codeabdeckung. Sie enthalten nur Metadaten und keinen ausführbaren Code, wie Sie selbst nennen.

Außerdem sehe ich nicht viel Sinn, um Code-Coverage bei dem Versuch, die Interop-Assembly. Sie sollten den Code-Coverage-Code werden Messen Sie schreiben.

Von dem MDN Forenthread Sie erwähnen, scheint es mir, Sie wollen tatsächlich messen, wie Sie Ihren Code, um die COM-Komponente verwendet. Es sei denn, Ziel Ihres Codes ist aufzuzählen und explizit alle Methoden und Eigenschaften des COM-Objekts aufrufen, müssen Sie keine Code-Coverage messen. Sie benötigen Einheit / Szenario Tests, um sicherzustellen, dass Ihr Code die richtigen Methoden / Eigenschaften zum richtigen Zeitpunkt angerufen werden.

Imho, der richtige Weg, dies zu tun wäre, eine Scheinschicht für das COM-Objekt zu schreiben und zu testen, die Sie alle Methoden aufrufen / Eigenschaften wie erwartet.

Andere Tipps

Plan C:

verwenden so etwas wie Mono.Cecil einfache Ausführung Zähler in die Interop-Assembly zu weben. Zum Beispiel, lesen Sie in diesem einen Abschnitt in der Faq : „Ich möchte hinzufügen einig Tracing-Funktionalität zu einer Baugruppe kann ich nicht debuggen, ist es möglich, Cecil mit? "

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top