2011-03-08 15 views
5

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

3

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.

+0

Tenía la esperanza de que no tendría que hacer esto, pero parece ser la única persona de contacto. – Bishnu

1

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.

+0

Las pruebas necesitan automatizar el código de compilación, por lo que esto no es posible. – Bishnu

0

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.

0

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.

1

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.

0

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).

Cuestiones relacionadas