Cuando creo un objeto simulado de la clase say Employee? No llama al constructor del objeto Employee. Sé internamente que Mockito usa CGLIb y reflexión, crea una clase proxy que amplía la clase para simular. Si no llama al constructor del empleado, ¿cómo se crea la instancia simulada de la clase de empleado?¿Cómo crea mockito una instancia del objeto simulado
Respuesta
Mockito usa CGLib para generar objetos de clase. Sin embargo, para instanciar este objeto de clase utiliza Objenesis http://objenesis.org/tutorial.html
Objenesis es capaz de crear instancias de objetos sin constructor usando varias técnicas (es decir, llamando a ObjectStream.readObject y similares).
enlace roto para Objenesis – bakoyaro
Aparentemente se movieron a un nuevo dominio y el proyecto ahora está en github. Arreglé el enlace –
Mockito está utilizando reflection y CGLib para extender la clase Employee con una superclase creada dinámicamente. Como parte de esto, comienza haciendo que todos los constructores de Employee sean públicos, incluido el constructor predeterminado, que aún existe pero privado si se declara un constructor que toma los parámetros.
public <T> T imposterise(final MethodInterceptor interceptor, Class<T> mockedType, Class<?>... ancillaryTypes) {
try {
setConstructorsAccessible(mockedType, true);
Class<?> proxyClass = createProxyClass(mockedType, ancillaryTypes);
return mockedType.cast(createProxy(proxyClass, interceptor));
} finally {
setConstructorsAccessible(mockedType, false);
}
}
private void setConstructorsAccessible(Class<?> mockedType, boolean accessible) {
for (Constructor<?> constructor : mockedType.getDeclaredConstructors()) {
constructor.setAccessible(accessible);
}
}
Supongo que llama al constructor predeterminado cuando se crea la superclase, aunque no lo he probado. Puede probarlo usted mismo al declarar el constructor predeterminado privado Employee() y ponerle un poco de registro.
- 1. ¿Se crea una instancia de superclase cuando instanciamos un objeto?
- 2. ¿Es posible consultar contra argumentos pasados a un objeto simulado de Mockito?
- 3. ¿Cómo crea C# una instancia de una clase?
- 4. Error "¡Crea una instancia concreta!"
- 5. Mockito thenReturn devuelve misma instancia
- 6. Cómo establecer una variable dentro de un objeto simulado
- 7. Mockito: tropezar con un método de un objeto que fue devuelto por un método de objeto simulado
- 8. ¿Cómo se crea una copia de una instancia de UIImageView?
- 9. Cómo crear una nueva instancia de clonación del objeto PSObject
- 10. Cómo crear una instancia del objeto DataContext en XAML
- 11. ¿Cómo creo un objeto simulado para Spring WebServiceTemplate?
- 12. Creación de un objeto simulado con propiedades predeterminadas
- 13. usando django, ¿cómo construyo una instancia de objeto proxy de una instancia de objeto de superclase?
- 14. ¿Por qué Scala no crea una instancia de un objeto complementario?
- 15. ¿Una propiedad @ privada crea una variable de instancia @private?
- 16. Recocido simulado de Java del pseudocódigo
- 17. Unboxing no crea una copia del valor. ¿Es esto correcto?
- 18. Java una instancia del objeto Corto en Java
- 19. OLAP simulado
- 20. Cómo obtener manualmente la instancia del objeto Graphics en WinForms?
- 21. ¿Qué tipo de objeto crea @ [obj1, obj2]?
- 22. Java: crea una instancia de HashBiMap de Google Collection
- 23. cuando se crea una instancia de un bean de resorte
- 24. Crea más de una instancia de Eshell en emacs
- 25. Android UncaughtExceptionHandler que crea una instancia de AlertDialog breaks
- 26. AliasToBeanResultTransformer (MyDTO.class) no crea una instancia de MyDTO
- 27. ¿Cuándo un objeto simulado ingresa al estado de reproducción?
- 28. Mockito. Verificar los argumentos del método
- 29. LINQ: la expresión Where devuelve una nueva instancia o referencia a la instancia del objeto
- 30. Cómo comprimir una instancia de objeto .net usando gzip
Creo que su mejor opción sería mirar el código fuente. A mi entender, parece que la creación de clase falsa ocurre en el método "imposterizar" en la clase ClassImposterizer. Aquí está el enlace a la clase mencionada anteriormente: http://mockito.googlecode.com/svn/trunk/src/org/mockito/internal/creation/jmock/ClassImposterizer.java – sateesh