Як з’єднати тест ArcObjects з глузуванням?


10

Я величезний шанувальник тестування одиниць, але все ще використовую FGDB, щоб отримати функції для запуску тестових одиниць при використанні рамки ArcObjects.

Хтось успішно використовує глузування з таких думок, як IFeature, IGeometry, IWorkspace тощо. Якщо так, я хотів би побачити кілька прикладів того, як ви це робите. Мені зовсім не цікаво, який глузуючий фреймворк ви використовуєте, просто побачивши, як ви це робите, буде дуже вдячний.

Проблема, яку я бачу, полягає в тому, що вам доведеться нарізати кубики між стільки інтерфейсами одного і того ж об’єкта, що накладні витрати на створення репрезентативного макетного об'єкта будуть величезними.


Для всіх, хто може не знати про глузування (як я), перейдіть за цим посиланням. Цікаві речі. stackoverflow.com/questions/300177/…
Саймон

Відповіді:


14

У великому проекті нам вдалося досить добре ізолювати код ArcObjects від нашої бізнес-логіки. Я б сказав, що це взагалі шлях, а не намагатися знущатися над усім, навіть якщо це можливо, використовуючи глузуючі рамки, щоб отримати деякий шлях.

Запитайте себе, чому саме ви відчуваєте потребу знущатися. Як правило, це через відсутність абстракції. Подумайте про невеликі обов'язки і мінімізуйте поверхню величезного, потворного монстра ArcObject. Уникайте перетягування типів ArcObject лише тому, що десь потрібен їх аспект.

Я можу навести один конкретний приклад з нашого проекту. Частина коду, здавалося, залежала від IMxDocument. Виявилося, що єдиною причиною було те, що активний погляд потрібно було оновити. Тож ми створили натомість інтерфейс IViewRefresher і працював лише над цим; легко висміювати і тестувати. Крім того, це робить намір коду набагато зрозумілішим і знімає спокусу, щоб хтось почав робити смішні речі з IMxDocument, які вони не повинні були робити, тому що все, що ми хотіли зробити тут, було оновити. Таку ж вправу можна виконати з великою кількістю коду ArcObjects.

Крім того, ми перетворили весь доступ до класів функцій у безпечних обгортках типу, знову надаючи макетний код, що захищає бізнес-код від ArcObjects.

Ми навіть не використовували геометричні типи ArcObjects, але в даний час ми дозволяємо використовувати ці інтерфейси безпосередньо в нашому коді. (Однак, лише знання інтерфейсу дозволено, і всі моменти геометрії використовують нашу власну фабрику геометрії.)

Підводячи підсумок, я не переслідую глузування, але рекомендую глузувати з іншого рівня абстракції, ніж ArcObjects.


чудова відповідь Кумбая. Також у мене є багато труднощів, які тестують код AO. Приклад, який ви навели, був чудовим (IViewRefresher), і я можу застосувати це до своєї роботи тут. Чи можете ви навести додаткові приклади?
Джордж Сільва

Спасибі Кумбая. Це те, що я зараз роблю для середніх та великих проектів, створюючи окрему збірку, щоб абстрагувати всю реалізацію AO. Цю абстракцію я хотів би перевірити, не вдаючись до збережених даних, будь то робочі простори XML або бази даних геоданих того чи іншого типу. Я вважаю, що час від часу з різними даними виникають нові проблеми, для яких потім потрібно створити тести, що потребує додаткових даних тесту. З часом у мене з’явилося стільки тестових даних для всіх тестових випадків, що проекти стають величезними для управління та переміщення, нехай завантажуються моїм автоматизованим сервером збірки.
BlinkyBill

Кумбая, це звучить неймовірно. Я хотів би привести кілька прикладів. Чи задумувались ви щось представити на цю тему на одній з конференцій ESRI? Я думаю, що спільнота ESRI / GIS вмирає від подібних матеріалів. Хочеться побачити рух з відкритим кодом для початку тестування / знущань над ArcObjects.
Кіт Г

Це стара тема, яку я розумію, але будь-який шанс ми зможемо отримати зразок вашої "власної фабрики геометрії"? Я намагаюся перенести мою організацію в напрямку одиничного тестування, але я зависаю на мавпі ArcObjects.
Лука

4

Тестування підрозділів для розробників Esri від Дейва Буумана та Брайана Нойла є досить хорошим початковим місцем - тим більше, що вони викинули якийсь код, щоб подивитися.


Дякуємо за вказівник бій. Те, що робить Дейв, - це просто використовувати представлення XML-функцій. Тож, хоча це допомагає, він все ще покладається на зберігання даних для тестів, від чого я намагаюся уникнути.
BlinkyBill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.