2014-04-21 32 views
1

我想單元測試一個處理消息記錄的代碼,這會帶來很多環境依賴性。此消息記錄器是所有開發人員跨團隊使用的框架。由於Logging類是一個靜態類,因此我使用了PowerMock。爲什麼PowerMock試圖加載server.xml文件,如果靜態類被嘲笑?

雖然使用Power Mock後Junit單元測試運行綠色,但它仍嘗試加載server.xml文件。

調用類是如下

的單元測試類調用 - >靜態記錄器類calls->靜態環境類。

該靜態環境類負責加載和解析server.xml文件。

我曾嘗試以下以及但即便如此,它的特林加載XML文件:

@RunWith(PowerMockRunner.class) 

@PrepareForTest({Logger.class,EnvFunctions.class}) 

PowerMockito.mockStatic(Logger.class); 

PowerMockito.mockStatic(EnvFunctions.class); 

我是否需要爲它做一些額外的工作,不再試圖加載該文件?

我想模擬一個靜態void類,並試圖使用doNothing和supress。但它不工作

doNothing.when(Logger.class); 

suppress(everythingDeclaredIn(Logger.class)); 

回答

1

謝謝你的迴應。

我能夠與上述的解釋來解決它

有人嘗試加載server.xml文件,因爲Logger.class有一個靜態初始化塊,打電話處理XML文件加載另一個靜態方法。

爲powermock @SuppressStaticInitializationFor annototation的伎倆

@RunWith(PowerMockRunner.class) 

@PrepareForTest({Logger.class}) 

@SuppressStaticInitializationFor("org.mycompany.Logger") 
public Class A{ 
PowerMockito.mockStatic(Logger.class); 
}