Quiero simular una variable final estática y simular una clase i18n con JUnit, EasyMock o PowerMock. ¿Cómo puedo hacer eso?Cómo simular una variable final estática con JUnit, EasyMock o PowerMock
Respuesta
¿Hay algo así como burlarse de una variable? Yo llamaría a eso reasignar. No creo que EasyMock o PowerMock le den una forma fácil de reasignar un campo static final
(parece un extraño caso de uso).
Si desea hacer eso, probablemente haya algún problema con su diseño: evite static final
(o constantes globales más comunes) si sabe que una variable puede tener otro valor, incluso para fines de prueba.
De todas formas, se puede lograr que el uso de la reflexión (a partir de: Using reflection to change static final File.separatorChar for unit testing?):
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
// remove final modifier from field
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
Se usa de la siguiente manera:
setFinalStatic(MyClass.class.getField("myField"), "newValue"); // For a String
No se olvide de restablecer el campo a su valor original cuando derribando.
Cualquiera que use esto debe tener en cuenta que el compilador de java puede incluir constantes en línea y, por lo tanto, el código puede no tener acceso a otros campos finales (debería funcionar para File.separatorChar porque la constante sería inútil cuando está en línea). Esto se describe en [esta pregunta] (http://stackoverflow.com/questions/5173372/java-static-final-values-replaced-in-code-when-compiling) –
Si sé que la variable solo tiene otro valor durante pruebas unitarias, ¿cuál sería el enfoque sugerido? – Sharif
Se puede hacer usando una combinación de características de PowerMock. La burla estática usando la anotación @PrepareForTest({...})
, burlándose de su campo (estoy usando Mockito.mock(...)
, pero podría usar la construcción equivalente de EasyMock) y luego estableciendo su valor usando el método WhiteBox.setInternalState(...)
. Tenga en cuenta que esto funcionará incluso si su variable es private
.
Vea este enlace para un ejemplo extendido: http://codyaray.com/2012/05/mocking-static-java-util-logger-with-easymocks-powermock-extension
Nota: el "enlace para un ejemplo extendido" se refiere a burlarse de un campo ** estático **, no un campo ** estático final como se menciona en la pregunta. –
https://github.com/zhangyanwei/staticmock
- StaticMockito.enhanceClass ("xxx.Utility");
- StaticMockito.initMock (Utility.class);
- when (Utility.toClientId (clientName)). ThenReturn ("nombre"); verify (mocker (Utility.class)). ToClientId (clientName);
- 1. Burlando de un método final con PowerMock + EasyMock
- 2. Junit Pruebas parametrizadas junto con Powermock: ¿cómo?
- 3. variable estática final en Java
- 4. ¿Puedo simular el constructor de una superclase con Mockito/Powermock?
- 5. NoClassDefFoundError al usar Powermock
- 6. estática final String o strings.xml
- 7. variable final estática pública en una clase java importada
- 8. PowerMock clase estática no se burlan
- 9. variable final privada estática dentro de una enumeración
- 10. Intentar simular clase del sistema estático con PowerMock da VerifyError
- 11. Diferencia entre una variable estática y una final estática en Java
- 12. VerifyError con PowerMock en Android
- 13. JUnit EasyMock llamada al método inesperado
- 14. ¿Cómo ignorar las llamadas a métodos inesperados en JUnit/easymock?
- 15. JUnit: ¿Cómo simular las pruebas de System.in?
- 16. Representación de Ruby más cercana de una variable de clase 'privada estática final' y 'pública estática final' en Java?
- 17. Usando Arquillian y PowerMock en la misma prueba JUnit
- 18. SuiteClasses Junit con una lista estática de clases
- 19. ¿Puede Powermockito simular el método final en una clase de hormigón no final?
- 20. Junit con new Date()
- 21. ¿Cómo funciona la "reflexión estática" en Java? (por ejemplo, en mockito o easymock)
- 22. ¿Cómo me burlo de un método heredado de una clase abstracta con EasyMock?
- 23. Google App Engine: Memcache o variable estática?
- 24. una variable estática en c
- 25. Cómo declarar una variable estática en Javascript
- 26. Unidad probando una clase con notación autocableada usando Junit y EasyMock?
- 27. Métodos estáticos falsos de múltiples clases usando PowerMock
- 28. ¿Por qué declarar una variable o función estática en C?
- 29. motor de plantillas twig, usando una función estática o variable
- 30. Conseguir javassist que no se encuentra con PowerMock y PowerRule en Junit con Mockito
duplicado posible de [Mock campo final utilizando Mockito estática privada o Jmockit] (http://stackoverflow.com/questions/30703149/mock-private-static-final-field-using-mockito-or-jmockit) – kecso