2012-04-26 362 views
76

我知道如何使用PowerMock來模擬來自類的靜態方法。
但我想嘲笑使用JUnit和PowerMock的測試類中的多個類的靜態方法。使用PowerMock模擬來自多個類的靜態方法

誰能告訴我是否可以做到這一點,以及如何做到這一點?

+1

你只是以同樣的方式來模擬單個類的方法。你卡在哪裏? – artbristol 2012-04-26 07:42:34

+0

使用powermock時,需要將此註釋添加到測試類@PrepareForTest(ClassThatContainsStaticMethod.class)。但我們不能指定多個註釋。那麼該怎麼做呢? – Newbie 2012-04-26 08:16:56

回答

182

只爲多個班級做@PrepareForTest({Class1.class,Class2.class})

+7

大括號!這就是我所缺少的。 – sudocoder 2014-01-17 20:28:47

+2

也不要忘了用'@RunWith(PowerMockRunner.class)'切換到PowerMockRunner在類級別 – 2016-10-27 14:22:01

+0

@NikitaBarishok並不總是需要。您可以定義一個規則,而作出上述工作 - '@規則 公共PowerMockRule規則=新PowerMockRule();' – 2017-04-09 15:10:40

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

等等

+0

對於'PowerMock 1.6.5',在方法級別使用'@ PrepareForTest'存在問題(僅適用於我的課堂級別) – 2016-10-27 14:24:06

2

與powermock/JUnit的Java中,使用@PrepareForTest({})與儘可能多的靜態類,你想要的陣列({})。

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

} 

我已經使用powermock在斯卡拉/ JUnit中,作爲scalatest沒有與powermock整合。

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

    @Test 
    def test() { 
    } 
} 
相關問題