Jestem wielkim fanem testów jednostkowych, ale nadal korzystam z FGDB, aby pobrać funkcje do uruchamiania testów jednostkowych podczas korzystania ze środowiska ArcObjects.
Czy ktoś z powodzeniem stosuje drwiny z myśli takich jak IFeature, IGeometry, IWorkspace itp. Jeśli tak, chciałbym zobaczyć kilka przykładów tego, jak to robisz. Naprawdę nie obchodzi mnie, z jakich frameworków korzystasz, po prostu zobaczenie, jak to robisz, byłoby bardzo mile widziane.
Problem, jaki widzę, polega na tym, że musisz kroić i kroić kostkę między tyloma interfejsami na tym samym obiekcie, że narzut związany z tworzeniem reprezentatywnego obiektu próbnego byłby ogromny.
arcobjects
development
file-geodatabase
BlinkyBill
źródło
źródło
Odpowiedzi:
W dużym projekcie udało nam się całkiem dobrze oddzielić kod ArcObjects od naszej logiki biznesowej. Jest to ogólnie rzecz biorąc droga, którą powinienem powiedzieć, zamiast próbować wyśmiewać to wszystko, nawet jeśli jest to możliwe przy użyciu ramek próbnych, aby uzyskać trochę drogi.
Zadaj sobie pytanie, dlaczego czujesz potrzebę kpienia. Zazwyczaj dzieje się tak z powodu braku abstrakcji. Pomyśl o drobnych obowiązkach i zminimalizuj powierzchnię ogromnego, brzydkiego potwora ArcObject. Unikaj przeciągania wokół typów ArcObject tylko dlatego, że gdzieś potrzebny jest jakiś ich aspekt.
Mogę podać jeden konkretny przykład z naszego projektu. Część kodu zdawała się zależeć od IMxDocument. Okazało się, że jedynym powodem było odświeżenie aktywnego widoku. Zamiast tego stworzyliśmy interfejs IViewRefresher i pracowaliśmy tylko nad tym; łatwe do wyśmiewania i testowania. Dodatkowo sprawia, że zamiar kodu jest znacznie bardziej przejrzysty i usuwa pokusę, aby ktoś zaczął robić śmieszne rzeczy z IMxDocument, których nie powinni robić, ponieważ wszystko, co chcieliśmy zrobić, to odświeżenie. To samo ćwiczenie można wykonać z dużą ilością kodu ArcObjects.
Ponadto zawarliśmy cały dostęp do klas elementów w bezpiecznych opakowaniach typu, ponownie zapewniając kod możliwy do wyzerowania, chroniąc kod biznesowy przed ArcObjects.
Omówiliśmy nawet nieużywanie typów geometrycznych ArcObjects, ale obecnie zezwalamy na używanie tych interfejsów bezpośrednio w naszym kodzie. (Dozwolona jest jednak tylko znajomość interfejsu i wszystkie instancje geometrii korzystają z naszej własnej fabryki geometrii).
Podsumowując, nie zniechęcam do kpin, ale zachęcam do kpin na innym poziomie abstrakcji niż ArcObjects.
źródło
Testy jednostkowe dla deweloperów Esri autorstwa Dave'a Bouwmana i Briana Noyle'a to całkiem dobre miejsce startowe - zwłaszcza, że rzucili trochę kodu, aby obejrzeć.
źródło