¿Cómo probar ArcObjects con Mocking?

10

Soy un gran admirador de las pruebas unitarias, pero aún utilizo un FGDB para obtener características para ejecutar pruebas unitarias cuando utilizo el marco ArcObjects.

¿Alguien está usando con éxito la burla contra pensamientos como IFeature, IGeometry, IWorkspace, etc. Si es así, me encantaría ver algunos ejemplos de cómo lo está haciendo. Realmente no me importa qué marco de simulación use, solo vería cómo lo está haciendo sería muy apreciado.

El problema que veo es que tienes que cortar y cortar entre tantas interfaces en el mismo objeto, que la sobrecarga de crear un objeto simulado representativo sería enorme.

BlinkyBill
fuente
Para cualquier otra persona que no sepa sobre Burlarse (como yo), consulte este enlace. Cosas interesantes. stackoverflow.com/questions/300177/…
Simon

Respuestas:

14

En un gran proyecto, hemos logrado aislar bastante bien el código de ArcObjects de nuestra lógica empresarial. En general, ese es el camino a seguir, diría, en lugar de intentar burlarse de todo, incluso si es posible usar marcos de burla para obtener algo del camino.

Pregúntese, ¿por qué siente la necesidad de burlarse? Por lo general, se debe a una abstracción que falta. Piense en pequeñas responsabilidades y minimice la superficie del enorme y feo monstruo ArcObject. Evite arrastrar los tipos de ArcObject solo porque se necesita algún aspecto de ellos en alguna parte.

Puedo dar un ejemplo concreto de nuestro proyecto. Una parte del código parecía depender de IMxDocument. Resultó que la única razón era que la vista activa necesitaba actualizarse. Así que creamos una interfaz IViewRefresher y solo trabajamos en eso; Fácil de burlarse y probar. Además, hace que la intención del código sea mucho más clara y elimina la tentación de que alguien comience a hacer cosas divertidas con el IMxDocument que no se suponía que hicieran porque todo lo que queríamos hacer aquí era actualizar. El mismo ejercicio se puede hacer con gran parte del código de ArcObjects.

Además, envolvimos todo el acceso a las clases de entidad en envoltorios seguros de tipo, nuevamente proporcionando un código simulado que protege el código comercial de ArcObjects.

Hemos discutido ni siquiera el uso de los tipos de geometría de ArcObjects, pero actualmente permitimos que esas interfaces se usen directamente en nuestro código. (Sin embargo, solo se permite el conocimiento de la interfaz y todas las instancias de geometrías utilizan nuestra propia fábrica de geometría).

En resumen, no estoy desanimando la burla, pero alentaría la burla a un nivel de abstracción diferente al de ArcObjects.

Cumbayah
fuente
gran respuesta Cumbayah. También tengo muchas unidades de dificultades que prueban el código AO. El ejemplo que diste fue genial (IViewRefresher) y podría aplicarlo a mi trabajo aquí. ¿Puedes dar más ejemplos?
George Silva el
Gracias cumbayah. Esto es lo que hago actualmente en proyectos medianos a grandes, creando un ensamblaje separado para abstraer toda la implementación de AO. Sin embargo, es esta abstracción la que me gustaría probar sin recurrir a los datos almacenados, ya sean espacios de trabajo XML o geodatabases de un tipo u otro. Encuentro que, de vez en cuando, con diferentes datos, surgen nuevos problemas, que luego necesitan tener pruebas creadas, lo que requiere datos de prueba adicionales. Con el tiempo, tengo tantos datos de prueba para todos los casos de prueba, que los proyectos se vuelven enormes para administrar y mover, dejándolos descargar por mi servidor de compilación automatizado.
BlinkyBill
Cumbayah, esto suena increíble. Me encantaría algunos ejemplos. ¿Alguna vez ha considerado presentar algo sobre este tema en una de las conferencias de ESRI? Creo que la comunidad ESRI / GIS está muriendo por este tipo de cosas. Me encantaría ver algunos movimientos de código abierto para comenzar a probar / burlarse de ArcObjects.
Keith G
Este es un tema antiguo que entiendo, pero ¿hay alguna posibilidad de que podamos obtener una muestra de su "propia fábrica de geometría"? Estoy tratando de hacer que mi organización se mueva en la dirección de las pruebas unitarias, pero me estoy colgando del mono ArcObjects.
Lucas
4

Las pruebas unitarias para desarrolladores de Esri por Dave Bouwman y Brian Noyle son un buen punto de partida, especialmente porque lanzaron un código para mirar.

bwreilly
fuente
Gracias por el puntero bwreilly. Sin embargo, lo que Dave hace es simplemente usar representaciones XML de características. Entonces, aunque está ayudando, todavía depende del almacenamiento de datos para las pruebas, que es de lo que estoy tratando de escapar.
BlinkyBill