2011-08-18 17 views

Respuesta

23

De the documentation, en la sección llamada "Common - encapsulación bypass":

Uso Whitebox.invokeMethod (..) para invocar un método privado de un instancia o clase.

También puede encontrar ejemplos en la misma sección.

+0

el enlace está muerto ahora –

1
Whitebox.invokeMethod(myClassToBeTestedInstance, "theMethodToTest", expectedFooValue); 
+1

Encontré que la instancia de clase necesita ser utilizada en lugar del objeto de clase. (es decir, myClassToBeTestedInstance en lugar de ClassToBeTested.class) –

+0

@RabRoss correcto, reparado, gracias! –

5

Aquí es un ejemplo completo de cómo hacer para que:

import java.util.ArrayList; 
import java.util.List; 

import org.junit.Assert; 
import org.junit.Test; 
import org.powermock.reflect.Whitebox; 

class TestClass { 
    private List<Integer> methodCall(int num) { 
     System.out.println("Call methodCall num: " + num); 
     List<Integer> result = new ArrayList<>(num); 
     for (int i = 0; i < num; i++) { 
      result.add(new Integer(i)); 
     } 
     return result; 
    } 
} 

@Test 
public void testPrivateMethodCall() throws Exception { 
    int n = 10; 
    List result = Whitebox.invokeMethod(new TestClass(), "methodCall", n); 
    Assert.assertEquals(n, result.size()); 
} 
Cuestiones relacionadas