PowerMock, simula un método estático, LUEGO llama a métodos reales en todas las demás estáticas
Estoy configurando métodos estáticos de burla de una clase. Tengo que hacer esto en un método de configuración JUnit anotado @Before
.
Mi objetivo es configurar la clase para llamar a métodos reales, excepto para aquellos métodos que me mofo explícitamente.
Básicamente:
@Before
public void setupStaticUtil() {
PowerMockito.mockStatic(StaticUtilClass.class);
when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5); // mock out certain methods...
// Now have all OTHER methods call the real implmentation??? How do I do this?
}
El problema que estoy encontrando es que dentro de StaticUtilClass
el método public static int someStaticMethod(String s)
desafortunadamente arroja un RuntimeException
si se suministra con un valor null
.
Así que no puedo simplemente ir por la ruta obvia de llamar a los métodos reales como el valor predeterminado respuesta de la siguiente manera:
@Before
public void setupStaticUtil() {
PowerMockito.mockStatic(StaticUtilClass.class, CALLS_REAL_METHODS); // Default to calling real static methods
// The below call to someStaticMethod() will throw a RuntimeException, as the arg is null!
// Even though I don't actually want to call the method, I just want to setup a mock result
when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5);
}
Necesito establecer la respuesta predeterminada para llamar a métodos reales en todos los demás métodos estáticos después de Me burlo de los resultados del método que me interesa burlar.
Es esto posible?
1 answers
Lo que estás buscando se llama burla parcial.
En PowerMock puede usar el método mockStaticPartial.
En PowerMockito se puede utilizar stubbing, que solo se stub el método definido y dejar otro sin cambios:
PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5);
También no se olvide de la
@PrepareForTest(StaticUtilClass.class)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-01 18:19:47