Mock metody statyczne z wielu klas przy użyciu PowerMock


103

Wiem, jak mockować metody statyczne z klasy za pomocą PowerMock.
Ale chcę mockować statyczne metody z wielu klas w klasie testowej przy użyciu JUnit i PowerMock.

Czy ktoś może mi powiedzieć, czy można to zrobić i jak to zrobić?


1
Robisz to w ten sam sposób, w jaki mockujesz metody z pojedynczych klas. Gdzie utkniesz?
artbristol

Korzystając z powermock, należy dodać tę adnotację do klasy testowej @PrepareForTest (ClassThatContainsStaticMethod.class). Ale nie możemy podać wielu adnotacji. Więc jak to zrobić?
Nowicjusz

Odpowiedzi:


257

Po prostu zrób @PrepareForTest({Class1.class,Class2.class})dla wielu zajęć.


11
nawiasy klamrowe! tego mi brakowało.
sudocoder

2
Nie zapomnij również przejść na PowerMockRunner z @RunWith(PowerMockRunner.class)poziomem klasowym
Nikita Barishok

1
@NikitaBarishok nie zawsze jest potrzebne. Zamiast tego możesz zdefiniować regułę, aby powyższe działały -@Rule public PowerMockRule rule = new PowerMockRule();
Aniket Thakur

5
w kotlinie@PrepareForTest(Class1::class, Class2::class))
Ryan

Lepiej też używać @PrepareOnlyThisForTestzamiast @PrepareForTest. Ta ostatnia modyfikuje również nadklasy, co zwykle nie jest potrzebne.
www.Decompiler.com

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

itp...


Jeśli chodzi o PowerMock 1.6.5problemy z używaniem @PrepareForTestna poziomie metody (u mnie działa tylko na poziomie klasy)
Nikita Barishok

2

W języku Java z powermock / JUnit, wykorzystania @PrepareForTest({})z tak wielu klas statycznych, jak chcesz jak array ( {}).

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

}

Użyłem powermock w scala / junit, ponieważ scalatest nie ma integracji z powermockiem.

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

  @Test
  def test() {
  }
}

1

Jeśli używasz kotlin, składnia jest następująca

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.