我需要編寫一個模擬java.lang.Class類的實例的測試。 這是可能通過PowerMock?我們可以使用PowerMock創建一個java.lang.Class的模擬實例嗎?
我試圖做到以下幾點:
PowerMock.createMock(Class.class);
,其結果是:
java.lang.IllegalAccessError: java.lang.Class
at sun.reflect.GeneratedSerializationConstructorAccessor12.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:40)
at org.powermock.reflect.internal.WhiteboxImpl.newInstance(WhiteboxImpl.java:223)
at org.powermock.reflect.Whitebox.newInstance(Whitebox.java:139)
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2146)
at org.powermock.api.easymock.PowerMock.createMock(PowerMock.java:89)
根據PowerMock的文檔,這應該是可能的,但我仍然得到這個錯誤。
有人設法做到這一點嗎?
編輯: 爲什麼我需要這個? 在測試編碼有如下聲明:
if (someObject.getClass().getName().equals(SOME_CLASS_NAME_THAT_I_DONT_HAVE_ACCESS_TO)) { ... do some stuff ... }
我需要我的測試,以達到內部編碼的「如果」,我不能提供具有相應的名稱,該類甚至嘲笑實例。
作爲一種解決方法,我可以在測試中創建一個具有相同名稱和包的類,但它很醜。
EDIT2:
我也建議嘗試從this link
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.junit.Test;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Test1.class})
public class Test1 {
@Test
public void test() {
PowerMock.createMock(Class.class);
}
}
,結果是一樣的: 「java.lang.IllegalAccessError:java.lang.Class中的」
因此,作爲最終結果 - 似乎沒有辦法創建一個java.lang.Class的模擬實例
謝謝
嗯,我可以模擬getClass()方法,但它需要返回一個java.lang.Class類的實例:)並且因爲我不能返回一個模擬實例,所以我不能再模擬getName()方法。我能做的唯一事情就是創建一個具有相同名稱和包的實際類,並將其返回 - 我提到這是一種解決方法。 – vap78
@ vap78,我發現我的假設得到確認,[請參閱問題3.1](https://code.google.com/p/powermock/wiki/FAQ)。順便說一句,有[鏈接](https://code.google.com/p/powermock/source/browse/trunk/modules/module-test/mockito/junit4/src/test/java/samples/powermockito/junit4/ system/SystemClassUserTest.java)給出解決方法。他們建議使用[PrepareForTest](http://powermock.googlecode.com/svn/docs/powermock-1.3.5/apidocs/org/powermock/core/classloader/annotations/PrepareForTest.html)註釋。 – bsiamionau
@ vap78,請告訴我們是否有幫助 – bsiamionau