Estamos desarrollando aplicaciones para su uso dentro de AutoCAD. Básicamente, creamos un proyecto de biblioteca de clases y cargamos el .dll en autoCAD con un comando (NETLOAD).Mejores prácticas con pruebas unitarias en API de software de terceros (AutoCAD)
Como lo tanto, podemos utilizar los comandos "Paletas", controles de usuario, formularios, etc ...
Autodesk proporciona una API a través de algunos de DLL, corriendo en su directorio del programa. Al hacer referencia a estos dll, solo puede llamar al dll en tiempo de ejecución mientras carga su aplicación en AutoCAD (esta es una seguridad de licencia de AutoDesk).
Para nosotros, mientras desarrollamos, esto no es un problema, tenemos que probar visualmente en el contexto de AutoCAD, así que simplemente configuramos las propiedades de depuración para que comiencen acad.exe y carguen nuestra DLL con una secuencia de comandos en el parámetros acad.exe.
El problema es que al intentar probar la unidad de nuestro código, NUnit o mstest no se ejecutan desde el contexto de AutoCAD y tampoco pueden iniciarlo. Existe una herramienta llamada Gallio, que ha proporcionado una interfaz con AutoCAD, de modo que puede ejecutar la prueba unitaria a través de IPC con Canalizaciones con nombre.
Sin embargo, esta solución es, para mí, demasiado molesta. Quiero poder escribir pruebas rápidamente sin tener que abandonar mi querido IDE.
Entonces, ¿qué, desde una "buena vista de diseño" sería un buen enfoque para este problema? Estoy pensando que básicamente necesitaría una base de código comprobable que no haga referencia a los dll de AutoCAD y una no verificable que haga referencia a los dll de AutoCAD no comprobables.
Estoy seguro de que hay formas de hacer que esto funcione: (IOC, DI, Adapter Pattern,.) Simplemente no conozco estos principios en profundidad y, por lo tanto, no sé qué ruta satisfará mejor a mi propósitos y metas.
Gracias por su respuesta. Voy a mirar en esa dirección. Tengo un problema con su comentario en 3D: dado que no estamos simplemente abriendo un archivo, sino usando transacciones, editando objetos, etc. ¿Debería crear un contenedor para cada objeto Acad entonces? – Bertvan
@Bertvan: Encuentre la respuesta a esta pregunta: ¿Qué tan seguro está de que su código se rompa para cada objeto de ACad? Si no está seguro, escriba una prueba. Cuando se vuelve aburrido, detente. Cuando encuentre nuevos errores y no esté seguro nuevamente, agregue más pruebas. Debes encontrar * tu * mejor camino. –