2011-08-18 5 views

risposta

23

Da the documentation, nella sezione chiamata "Common - Bypass incapsulamento":

Usa Whitebox.invokeMethod (..) per invocare un metodo privato di un'istanza o classe.

È inoltre possibile trovare esempi nella stessa sezione.

+0

il collegamento è morto ora –

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

Ho trovato che l'istanza di classe deve essere utilizzata piuttosto che l'oggetto di classe. (vale a dire myClassToBeTestedInstance anziché ClassToBeTested.class) –

+0

@RabRoss corretto, corretto, grazie! –

5

Ecco un esempio completo come fare ad esso:

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()); 
}