2012-03-29 6 views
7

Ich habe eine Klasse, die InvocationHandler wie unten implementiert:Wie mimpfe ich die Klasse java.lang.reflect.Method in PowerMockito?

public class MyProxyClass implements InvocationHandler 
{ 
    public Object invoke (Object proxy, Method method, Object[] args) throws Throwable 
    { 
    //Do something interesting here 
    } 
} 

Mit PowerMock & Mockito, ich versuche in meiner Unit-Test-Klasse in einem verspottet Methode Objekt zu übergeben:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({Method.class}) 
public class MyProxyTest 
{ 
    MyProxy underTest; 

    @Test 
    public void testInvoke() throws Throwable 
    { 
    Method mockMethod = mock(Method.class); 
    //... 
    } 
} 

Seit Methode ist final, ich habe den @PrepareForTest Trick gemacht, aber das scheint es nicht zu schneiden. Ist das, weil es bootstrapped ist? Mache ich das nur falsch?

Ich habe auf die Links unten aus, aber es gibt nichts, es definitiv:

Antwort

3

Mit PowerMock Sie eine endgültige Klasse, aber spotten kann, obwohl ich es dokumentiert nicht glauben, gibt es einige Klassen in java.lang und java.lang.reflect Paket sind, dass Sie nur können‘ t spotten, weil sie zu grundlegend sind, wie der spöttische Rahmen es tut.

Ich denke, diese gehören (aber sind wahrscheinlich nicht beschränkt auf) java.lang.Class, java.lang.reflect.Method und java.lang.reflect.Constructor.

Allerdings, was versuchst du zu tun, das erfordert eine Scheinmethode? Sie könnten einfach ein reales Methodenobjekt erstellen. Sie könnten sogar ein reales Methodenobjekt in einer Dummy-Klasse erstellen, das Sie dann überprüfen könnten, ob es jemals aufgerufen wurde und mit welchen Argumenten. Sie können Mockito und Powermock einfach nicht dazu benutzen. Sehen Sie, ob Ihr Problem ähnlich zu this question ist.

+0

Ja, es sieht wie ein ähnliches Problem aus. Am Ende ging ich den Weg, ein Method-Objekt normalerweise aus einem Mock zu erstellen und dann zu verifizieren, dass die Methode im Mock aufgerufen wurde. Vielen Dank! –

Verwandte Themen