2010-09-07 13 views
7

¿Cómo puedo simular la operación de conversión? que tienen una operación de yeso en un objeto dependiente, que será lanzado a otro objeto dependiente como¿Cómo puedo EasyMock la operación de lanzamiento?

SqlMapClient sqlMapClient; 
SqlMapClientImpl sqlMapClientImpl = (SqlMapClientImpl) sqlMapClient 

me estoy burlando tanto los clesses dependientes, es decir, SqlMapClient y SqlMapClientImpl .Pero lo que necesito saber cómo se burlan de yeso utilizando EasyMock .

Cualquier ayuda sería apreciada.

+1

La pregunta más importante es por qué quieres burlarte de la operación de lanzamiento. ¿Qué es lo más grande que intentas probar? – NamshubWriter

+0

Genial [Problema XY] (http://xyproblem.info/). Si sientes la necesidad de bajar de la interfaz a una implementación concreta, significa que tu nivel de abstracción actual tiene fugas y eso es lo que primero debes modificar. – Spotted

Respuesta

4

No se puede simular una conversión, ya que una conversión no da como resultado una llamada de método al objeto.

su lugar, utilice la extensión Clase EasyMock para burlarse de la clase SqlMapClientImpl, y pasar una referencia a ese simulacro de la clase que se lleva en un SqlMapClient a un SqlMapClientImpl

Tenga en cuenta, sin embargo, que haciendo un abatido como que en su el código es un olor a código. Si su código de producción está realizando un downcast de una interfaz a una clase de implementación, entonces perderá toda la flexibilidad de usar una interfaz. En realidad, puede ser peor que no usar una interfaz, ya que parece que su clase depende de la interfaz y, por lo tanto, puede usarse con cualquier implementación, pero en realidad su clase depende de una implementación específica.

+0

Esto no funcionará si su SqlMapClientImpl es una clase final ... ya que no puede burlarse de una clase final. – JamesD

+0

@JamesD, el OP ya dijo que se están burlando de 'SqlMapClientImpl'. Si necesita hacer algo similar con una clase final, podría tratar de pasar un 'SqlMapClientImpl' real, suponiendo que era una construcción barata. – NamshubWriter

0

La razón por la que no podemos emitir es que Easy Mock creará dinámicamente una clase que implementará la clase SqlMapClient y no tiene ninguna información sobre la clase Implementación (SqlMapClientImpl), por lo que un truco barato podría ser crear una clase que implementar la interfaz SqlMapClient y extender la clase SqlMapClientImpl esto podría funcionar.

Cuestiones relacionadas