Tenemos un contenedor al que hemos perdido el código fuente. Descompiqué el contenedor y creé una nueva fuente a partir de él. Quiero verificar que el código fuente y el antiguo contenedor tengan el mismo comportamiento. Estoy escribiendo pruebas unitarias para hacer la verificación, el problema es que ambos tienen el mismo nombre de espacio de clases/nombre de clase, así que no sé cómo eliminar la ambigüedad del antiguo contenedor y el nuevo código fuente. ¿Qué puedo hacer o es imposible?Java: resolver el conflicto del espacio de nombres
Respuesta
Solo necesita tener una versión en la ruta de clases a la vez para garantizar que está ejecutando esa versión del código. Desarrolla tu prueba unitaria por separado del código para que puedas incluir ambas versiones.
Proporcione a la nueva fuente un espacio de nombre temporal para fines de prueba. Entonces, en lugar de la importación, se puede hacer referencia a sus nuevas clases como:
com.yourfirm.test.packagename.TheClassName
los viejos pueden ser importados y simplemente referido como TheClassName
. De esta manera usted puede ver mirando sus casos de prueba cuál es cuál.
O simplemente ejecute las pruebas con -cp oldpackage.jar
y luego -cp newpackage.jar
.
Las pruebas necesitan automatizar el código de compilación, por lo que esto no es posible. – Bishnu
Cambiaría las clases que se están probando en tiempo de ejecución con classpath. Este enfoque sería menos propenso a errores en términos de garantizar que está ejecutando el mismo código de prueba contra ambos binarios. De lo contrario, introduce más complejidad sobre si las pruebas son correctas.
Parece que está intentando ejecutar las pruebas en ambos jarrones al mismo tiempo. No sé de una forma de desambiguar las jarras antiguas/nuevas si ambas están en la ruta de clases.
Si su unidad prueba los resultados de salida a stdout/stderr, puede ejecutar las pruebas en el jar original y guardar los resultados. Luego ejecute las pruebas contra el nuevo jar y guarde los resultados en un archivo separado. Luego difunde los archivos.
Otro enfoque sería refactorizar el nuevo código fuente para que tenga un espacio de nombre único. A continuación, puede probar con ambas jarras al mismo tiempo, pero podría ser mucho trabajo hacer que los programas existentes usen la nueva jarra.
Es posible, pero tiene que perder el tiempo con la carga de clases. En lugar de poner cualquiera de los dos en el classpath, tendrás que cargarlos en tiempo de ejecución. Consulte JCL para obtener una biblioteca que le permita hacer esto. (Descargo de responsabilidad: nunca he usado JCL.)
Básicamente, cada prueba tendría que cargar la clase del JAR antiguo, obtener los resultados del método que está probando, luego descargar ese JAR, cargar el nuevo , ejecute el mismo método en comparación con la nueva versión y compare los resultados.
Si ejecuta sus pruebas a través de ant (Junit-task), puede controlar el classpath de hormiga por separado para ambas ejecuciones (una vez a través de jar, una a través de un conjunto de archivos de clases).
- 1. Espacio de nombres y conflicto de clase
- 2. Espacio de nombres y conflicto de clase (?)
- 3. ¿Cómo resolver el conflicto de fusión del archivo xib?
- 4. Conflicto entre un espacio de nombres y una definición
- 5. C++: el conflicto de espacio de nombres entre extern "C" y miembro de la clase
- 6. maravilloso MarkupBuilder conflicto de nombres
- 7. ¿Cómo resolver las dependencias del vinculador en conflicto?
- 8. Java mundial espacio de nombres de acceso
- 9. el nombre del tipo o el nombre del espacio de nombres no existe en el espacio de nombres
- 10. ¿Cómo puedo resolver este conflicto de git?
- 11. Cómo resolver el conflicto de simultaneidad en ado.net
- 12. 1152: Existe un conflicto con la definición heredada en el espacio de nombres público
- 13. ¿Cómo se resuelve el espacio de nombres .Net entra en conflicto con la palabra clave 'using'?
- 14. Eliminar el espacio de nombres de App Engine (Java)
- 15. Orden de búsqueda del espacio de nombres
- 16. Resolver "CONFLICTO (eliminar/modificar)" en git
- 17. El operador del Espacio de nombres ... ¿cuál es el problema?
- 18. ¿Cómo resolver un conflicto con git-svn?
- 19. Espacio de nombres definición del miembro
- 20. ¿Cómo usar el espacio de nombres org.apache.commons.lang en Java?
- 21. Consulta del espacio de nombres Nokogiri/Xpath
- 22. Biblioteca de otros #define conflicto de nombres
- 23. Métodos dentro del espacio de nombres C#
- 24. Aliasing de espacio de nombres en F #?
- 25. El tipo o el nombre del espacio de nombres 'ServiceBus' no existe en el espacio de nombres 'Microsoft'
- 26. El tipo o el nombre del espacio de nombres 'Linq' no existe en el espacio de nombres 'Sistema'
- 27. El tipo o el nombre del espacio de nombres 'Mvc' no existe en el espacio de nombres 'System.Web'
- 28. El tipo o el nombre del espacio de nombres UpdatePanel no existe en el espacio de nombres System.Web.UI
- 29. El tipo o el nombre del espacio de nombres 'Objetos' no existe en el espacio de nombres 'System.Data'
- 30. El tipo o el nombre del espacio de nombres 'Linq' no existe en el espacio de nombres 'System.Data'
Tenía la esperanza de que no tendría que hacer esto, pero parece ser la única persona de contacto. – Bishnu