Mock metodi statici da più classi utilizzando PowerMock


103

So come deridere 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.

Qualcuno può dirmi è possibile farlo e come farlo?


1
Lo fai nello stesso modo in cui prendi in giro i metodi di singole classi. Dove sei bloccato?
artbristol

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

Risposte:


257

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


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

2
Inoltre, non dimenticare di passare a PowerMockRunner con @RunWith(PowerMockRunner.class)il livello di classe
Nikita Barishok

1
@NikitaBarishok non è sempre necessario. Puoi invece definire una regola per far funzionare sopra -@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur

5
a kotlin@PrepareForTest(Class1::class, Class2::class))
Ryan

È anche meglio usare al @PrepareOnlyThisForTestposto di @PrepareForTest. Quest'ultimo modifica anche le superclassi, che normalmente non è necessario.
www.Decompiler.com

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

eccetera...


Per quanto riguarda i PowerMock 1.6.5problemi di utilizzo @PrepareForTesta livello di metodo (funziona solo a livello di classe per me)
Nikita Barishok

2

In java con powermock / junit, usa @PrepareForTest({})tutte le classi statiche che vuoi come array ( {}).

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

}

Ho usato powermock con in scala / junit, poiché scalatest non ha l'integrazione con powermock.

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

  @Test
  def test() {
  }
}

1

Se stai usando kotlin, la sintassi è questa

@PrepareForTest(ClassA::class, ClassB::class)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.