2017-01-12 24 views
2

我在powermock測試用例Maven中運行時,以下錯誤:@PowerMockIgnore項目層面

java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading for a different type with name "javax/management/MBeanServer" 

解決的方法是添加註釋

@PowerMockIgnore("javax.management.*") 

的問題是我有很多的測試文件我必須添加這個註釋。

有沒有辦法在項目級別或Maven中添加此項?

謝謝

+0

你是怎麼找到這個「解決方案」:你可以通過添加文件到classpath中能夠通過創建配置?因爲它看起來更像是解決方案而不是解決方案... – Line

+0

@Line Nopes :(在理想的情況下,如果我們編寫我們的代碼可測試,我們絕不應該使用PowerMock – abhig

+0

但是什麼「nopes」?你能告訴我這裏@PowerIgnore來自,你是怎麼發現它的? – Line

回答

1

我不認爲這是可能的。

請記住,最後是執行那些測試用例的JUnit。逐個。而JUnit對周圍的一個Maven「項目」一無所知。

JUnit只知道它即將處理的測試類中的元素。

因此:這些語句需要進入所有的測試用例;理想情況下僅限於那些真正需要它的人。

結束語:請不要誤解我的意思,但在我看來,您真正的問題是您似乎在您的項目中不分青紅皁白地使用PowerMock。這可能表明許多開發人員不知道如何編寫可測試的代碼 ...然後他們通過轉向PowerMock來「修復」。遲早你有可能會後悔。

編輯:用於學習如何編寫可測代碼---開始here

+0

謝謝@GhostCat。我們正在努力使代碼更易於測試 – abhig

+0

歡迎您FIES - 我添加了一個非常有用的鏈接,以防你想培訓你的人如何使你的代碼更可測試;-) – GhostCat

+1

謝謝@GhostCat – abhig

1

由於PowerMock 1.7.0,您可以使用configuration file指定要忽略的軟件包。

powermock.global-ignore="org.myproject.*"

多個包/類可使用逗號來指定:

powermock.global-ignore="org.myproject.*","org.3rdpatproject.SomeClass"

此配置被應用到所有的測試類,在類路徑。

org/powermock/extensions/configuration.properties