2012-04-26 8 views
76

Ich weiß, wie statische Methoden aus einer Klasse mit PowerMock mock.
Aber ich möchte statische Methoden aus mehreren Klassen in einer Testklasse mit JUnit und PowerMock verspotten.Mock statische Methoden aus mehreren Klassen mit PowerMock

Kann mir jemand sagen, ist es möglich, dies zu tun und wie es geht?

+1

Sie tun es auf die gleiche Weise, wie Sie Methoden aus einzelnen Klassen verspotten. Wo steckst du fest? – artbristol

+0

Wenn Sie powermock verwenden, müssen Sie diese Anmerkung der Testklasse @PrepareForTest (ClassThatContainsStaticMethod.class) hinzufügen. Wir können jedoch nicht mehrere Annotationen angeben. So wie es geht? – Newbie

Antwort

182

Tun Sie einfach @PrepareForTest({Class1.class,Class2.class}) für mehrere Klassen.

+7

geschweifte klammern! das habe ich vermisst. – sudocoder

+2

Vergessen Sie auch nicht, mit '@RunWith (PowerMockRunner.class)' auf Klassenebene zu PowerMockRunner zu wechseln –

+0

@NikitaBarishok wird nicht immer benötigt. Sie können stattdessen eine Regel definieren, um über die Arbeit zu gehen - "@Rule public PowerMockRule rule = new PowerMockRule();' –

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

etc ...

+0

Wie 'PowerMock 1.6.5' gibt es Probleme mit' @ PrepareForTest' auf Methodenebene (funktioniert nur auf Klassenebene für mich) –

2

in Java mit PowerMock/junit, Verwendung @PrepareForTest({}) mit so vielen statischen Klassen, wie Sie als Array wollen ({}).

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

} 

I PowerMock mit in scala/junit verwendet haben, als scalatest haben nicht die Integration mit PowerMock.

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

    @Test 
    def test() { 
    } 
}