В большом проекте нам удалось довольно хорошо изолировать код ArcObjects от нашей бизнес-логики. Я бы сказал, что это, в общем-то, путь, а не пытаться все это высмеивать, даже если это возможно с использованием фальшивых фреймворков.
Спросите себя, почему именно вы чувствуете необходимость издеваться. Как правило, это из-за отсутствующей абстракции. Подумайте о небольших обязанностях и минимизируйте поверхность огромного, уродливого монстра ArcObject. Избегайте перетаскивания типов ArcObject только потому, что где-то нужен какой-то их аспект.
Я могу привести один конкретный пример из нашего проекта. Часть кода, казалось, зависела от IMxDocument. Оказалось, единственная причина была в том, что активный вид нужно было обновить. Поэтому мы создали интерфейс IViewRefresher и работали только над этим; легко издеваться и тестировать. Кроме того, это делает цель коды гораздо более четкой и снимает соблазн для кого - то , чтобы начать делать смешные вещи с IMxDocument , что они не должны были делать , потому что все , что мы хотели сделать здесь было обновление. То же самое упражнение можно выполнить с большим количеством кода ArcObjects.
Кроме того, мы обернули весь доступ к классам пространственных объектов в безопасные оболочки типов, снова предоставляя поддельный код, экранирующий бизнес-код от ArcObjects.
Мы обсуждали даже не использование типов геометрии ArcObjects, но в настоящее время мы разрешаем использовать эти интерфейсы непосредственно в нашем коде. (Тем не менее, только знание интерфейса разрешено, и все экземпляры геометрии используют нашу собственную фабрику геометрии.)
Таким образом, я не разочаровываю насмешки, но я бы посоветовал имитировать на уровне абстракции, отличном от ArcObjects.