2017-11-21 1 views
0

Es wird initializationError geworfen. Ich benutze powermock 1.6.4 und javassist-3.20.0. Es scheint, ich kann mich nicht gleichzeitig in derselben Klasse verspotten und verspotten.PowerMock throw initializationError, wenn die statische Methode einer Klasse das gleiche Objekt einer Klasse zurückgibt

interface B 
{ 
    public static B getA() 
    { 
    return new B() 
     { 
     }; 
    } 
} 

a test code is: 
@PrepareForTest({B.class}) 
@Test 
    public void testB() 
    { 
    B a = mock(B.class); 
    mockStatic(B.class); 
    when(B.getA()).thenReturn(a); 

    } 
+0

Wo ist der Fehler geworfen? Bitte fügen Sie bei, was Sie bisher versucht haben, um dieses Problem zu lösen. – petryuno1

+0

Es wird kein Fehler ausgegeben, weder Fehler noch Trace. Wenn ich eine BFactory und den Code wie folgt verwende: B a = mock (B.class); mockStatic (BFactory.class); when (BFactory.getA()). thenRturn (a); dann funktioniert es gut, aber ich möchte keine Fabrik nur für diesen Scheintest-Zweck hinzufügen. – user2201253

Antwort

0

Sie haben den B mock vorzubereiten (durch zum Beispiel unter Verwendung von PowerMockRunner) sonst wird der Test ein ClassNotPreparedException an dieser Linie werfen:

mockStatic(B.class); 

Dieser Test wird vorübergehen (obwohl da es keine Aussagen könnte es genauer zu sagen, dass dieser Test nicht eine Ausnahme ausgelöst wird;):

@RunWith(PowerMockRunner.class) 
@PrepareForTest({B.class}) 
public class BTest { 

    @Test 
    public void testB() { 
     B a = Mockito.mock(B.class); 
     PowerMockito.mockStatic(B.class); 
     Mockito.when(B.getA()).thenReturn(a); 
    } 
} 

ich dies mit prüft haben:

  • Mockito v1.10.19 mit PowerMock v1.6.4
  • Mockito v2.7.19 mit PowerMock v1.7.0
Verwandte Themen