我需要编写一个模拟 java.lang.Class 类实例的测试。
这可以通过 PowerMock 实现吗?
我尝试执行以下操作:
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 ... }
我需要我的测试来达到“if”内的编码,并且我什至无法提供具有相应名称的类的模拟实例。
作为一种解决方法,我可以在测试中创建一个具有相同名称和包的类,但它很丑陋。
Edit2:
我也尝试了来自的建议这个链接 https://code.google.com/p/powermock/source/browse/trunk/modules/module-test/mockito/junit4/src/test/java/samples/powermockito/junit4/system/SystemClassUserTest.java
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 的模拟实例
谢谢