2010-01-26 15 views
14

Las clases de buffer de protocolo están marcadas final, presumiblemente por eficiencia; sin embargo, esto los hace bastante difíciles de probar con - Mockito no se puede burlar/espiar las clases finales. Intenté usar PowerMockito sin éxito: Obtuve un ClassFormatError al preparar la clase final para la prueba.¿Es posible simular un mensaje de buffer de protocolo Java?

Mi solución hasta ahora es crear interfaces de adaptadores simuladas, pero espero que haya un enfoque menos laborioso.

+3

No entiendo por qué necesitaría simular una clase de mensaje protobuf. Si necesita usar uno en una prueba, simplemente créelo de la manera normal. Si se está burlando de un servicio, podría simplemente burlarse del ServiceClass.Interface. –

+0

@Geoff: Ese es un buen punto, usar algunos valores simples funcionará en muchos casos: esperaba utilizar la funcionalidad RETURNS_MOCKS para evitar tener que compilar los mensajes más complicados y verificar que se lean ciertas partes del mensaje. Probaré otros frameworks falsos mencionados a continuación para ver cómo van. – cdleary

Respuesta

1

Jdave tiene una Unfinalizer que se integra con el JMock ClassImposteriser

No puede anular la finalización de las clases cargadas desde el arranque del cargador de clases, y que requiere un argumento VM al iniciar las pruebas.

2

JMockit puede manejar final y static. Solo preste atención a cómo configurarlo, ya que requiere el parámetro -javaagent JVM, o ajustes de ruta de clase, o anotaciones adicionales para poder simular final y static.

+0

JMockit no se burla de ellos con java.lang.ExceptionInitializerError. – cdleary

+0

¿Has probado todas las características de la redefinición de javaagent? Si está intentando simular una clase java de sistema/núcleo, debe anular la ruta de clase de arranque de JVM. Tal vez sus pruebas le faltan una anotación? Lo siento, no puedo ser de más ayuda. No estoy familiarizado con la clase de la que intentas burlarte o cómo te estás acercando. – aberrant80

+0

En realidad, debería ser fácil hacer funcionar una prueba JMockit: agregue '-javaagent: /jmockit.jar' como un parámetro de inicio de JVM, o agregue jmockit.jar antes de junit-xyz.jar al classpath si usa JDK 1.6 . Si aún falla, publique su problema específico en el grupo de discusión Usuarios de JMockit. –

Cuestiones relacionadas