Ich bin ein großer Fan von Unit-Tests, benutze aber immer noch eine FGDB, um Funktionen zum Ausführen von Unit-Tests zu nutzen, wenn ich das ArcObjects-Framework verwende.
Verwendet jemand erfolgreich Spott gegen Gedanken wie IFeature, IGeometry, IWorkspace usw. Wenn ja, würde ich gerne einige Beispiele dafür sehen, wie Sie es tun. Es ist mir eigentlich egal, welches spöttische Framework Sie verwenden, nur zu sehen, wie Sie es tun, wäre sehr dankbar.
Das Problem, das ich sehe, ist, dass Sie zwischen so vielen Schnittstellen auf demselben Objekt schneiden und würfeln müssen, dass der Aufwand für die Erstellung eines repräsentativen Scheinobjekts enorm wäre.
arcobjects
development
file-geodatabase
BlinkyBill
quelle
quelle
Antworten:
Bei einem großen Projekt ist es uns recht gut gelungen, ArcObjects-Code von unserer Geschäftslogik zu isolieren. Das ist im Allgemeinen der richtige Weg, würde ich sagen, anstatt zu versuchen, alles zu verspotten, selbst wenn es möglich ist, spöttische Frameworks zu verwenden, um einen Teil des Weges zu finden.
Fragen Sie sich, warum Sie sich verspotten müssen. In der Regel liegt dies an einer fehlenden Abstraktion. Denken Sie an kleine Aufgaben und minimieren Sie die Oberfläche des riesigen, hässlichen ArcObject-Monsters. Vermeiden Sie das Herumziehen von ArcObject-Typen, nur weil ein Teil davon irgendwo benötigt wird.
Ich kann ein konkretes Beispiel aus unserem Projekt geben. Ein Teil des Codes schien von IMxDocument abzuhängen. Es stellte sich heraus, dass der einzige Grund darin bestand, dass die aktive Ansicht aktualisiert werden musste. Also haben wir stattdessen eine IViewRefresher-Schnittstelle erstellt und nur daran gearbeitet. leicht zu verspotten und zu testen. Darüber hinaus wird die Absicht des Codes viel klarer und die Versuchung für jemanden beseitigt, mit dem IMxDocument lustige Dinge zu tun, die er eigentlich nicht tun sollte, weil wir hier nur aktualisieren wollten. Die gleiche Übung kann mit einem Großteil des ArcObjects-Codes durchgeführt werden.
Außerdem haben wir den gesamten Zugriff auf Feature-Classes in typsichere Wrapper eingeschlossen und erneut verspottbaren Code bereitgestellt, der den Geschäftscode vor ArcObjects schützt.
Wir haben nicht einmal die Verwendung der Geometrietypen von ArcObjects erörtert, aber derzeit erlauben wir, dass diese Schnittstellen direkt in unserem Code verwendet werden. (Es sind jedoch nur Schnittstellenkenntnisse zulässig, und alle Instanziierungen von Geometrien verwenden unsere eigene Geometriefabrik.)
Zusammenfassend kann ich sagen, dass ich das Verspotten nicht entmutige, aber ich würde das Verspotten auf einer anderen Abstraktionsebene als ArcObjects fördern.
quelle
Unit-Tests für Esri-Entwickler von Dave Bouwman und Brian Noyle sind ein ziemlich guter Ausgangspunkt - vor allem, weil sie Code zum Anschauen herausgeschmissen haben.
quelle