Si usted es capaz de refactorizar su código, se puede envolver sus llamadas a los métodos finales/estáticos en los métodos de instancia simples, por ejemplo:
protected Foo doBar(String name) {
return Utility.doBar(name);
}
Esto le permite anular el método de envoltura en el prueba unitaria para devolver una instancia falsa de Foo.
Alternativamente, puede utilizar Powermock, que se extiende EasyMock (y Mockito) para permitir burlarse de métodos finales y estáticas:
PowerMock es un marco que se extienden otras bibliotecas simuladas tal como EasyMock con capacidades más potentes. PowerMock utiliza un cargador de clases personalizado y manipulación de códigos de bytes para permitir la burla de métodos estáticos, constructores, clases y métodos finales, métodos privados, eliminación de inicializadores estáticos y más.
Aquí es una prueba example burlarse de un método static final, el ejemplo muestra cómo burlarse de algunos otros tipos también:
@Test
public void testMockStaticFinal() throws Exception {
mockStatic(StaticService.class);
String expected = "Hello altered World";
expect(StaticService.sayFinal("hello")).andReturn("Hello altered World");
replay(StaticService.class);
String actual = StaticService.sayFinal("hello");
verify(StaticService.class);
assertEquals("Expected and actual did not match", expected, actual);
// Singleton still be mocked by now.
try {
StaticService.sayFinal("world");
fail("Should throw AssertionError!");
} catch (AssertionError e) {
assertEquals("\n Unexpected method call sayFinal(\"world\"):",
e.getMessage());
}
}
¿Hay alguna razón por la que necesite utilizar un framework de Mock? –
Sí, las llamadas al método usan propiedades JNDI para conectarse a la base de datos y a JMS, no quiero implementar todas las piezas para mi prueba. –
¿Puede refactorizar algún código heredado para ayudarlo? –