2012-04-26 9 views
76

So come simulare i metodi statici da una classe usando PowerMock.
Ma voglio prendere in giro metodi statici da più classi in una classe di test usando JUnit e PowerMock.Metodi statici simulati da più classi usando PowerMock

Qualcuno può dirmi che è possibile farlo e come farlo?

+1

Lo si fa semplicemente nello stesso modo in cui si prendono in giro i metodi da singole classi. Dove sei bloccato? – artbristol

+0

Quando si utilizza powermock, è necessario aggiungere questa annotazione alla classe di test @PrepareForTest (ClassThatContainsStaticMethod.class). Ma non possiamo specificare più annotazioni. Quindi come si fa? – Newbie

risposta

182

Basta fare @PrepareForTest({Class1.class,Class2.class}) per più classi.

+7

parentesi graffe! questo è quello che mi mancava. – sudocoder

+2

Inoltre, non dimenticare di passare a PowerMockRunner con '@RunWith (PowerMockRunner.class)' a livello di classe –

+0

@NikitaBarishok non sempre necessario. È possibile definire una regola invece di eseguire sopra work -' @ Regola rule PowerMockRule pubblica = new PowerMockRule(); ' –

8
@Test 
@PrepareForTest({Class1.class, Class2.class}) 
public final void handleScript() throws Exception { 
    PowerMockito.mockStatic(Class1.class); 
    PowerMockito.mockStatic(Class2.class); 

ecc ...

+0

Per quanto riguarda 'PowerMock 1.6.5' ci sono problemi nell'uso di' @ PrepareForTest' a livello di metodo (funziona solo a livello di classe per me) –

2

in Java con powermock/JUnit, uso @PrepareForTest({}) con il maggior numero di classi statiche, come si vogliono, array ({}).

@RunWith(PowerMockRunner.class) 
@PrepareForTest({XmlConverterA.class, XmlConverterB.class}) 
class TransfersServiceExceptionSpec { 

} 

Ho usato powermock con a Scala/JUnit, come ScalaTest non hai l'integrazione con powermock.

@RunWith(classOf[PowerMockRunner]) 
@PrepareForTest(Array(classOf[XmlConverterA], classOf[XmlConverterB])) 
class TransfersServiceExceptionSpec { 

    @Test 
    def test() { 
    } 
}