我需要编写一个模拟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”中的编码,我甚至不能提供具有相应名称的类的模拟示例。
作为一种解决方法,我可以在测试中创建一个具有相同名称和包的类,但这很难看。
编辑2:
我也尝试了这个链接的建议
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的模拟示例
谢谢您
4条答案
按热度按时间pxy2qtax1#
根据这份声明,
...
在java.lang.reflect.constructor.newinstance(constructor。java:526)
...
powermock(使用objenesis库)尝试示例化
java.lang.Class
,只能由jvm示例化。来自文档:类没有公共构造函数。相反,类对象是由java虚拟机在装入类时自动构造的,并通过调用类装入器中的defineclass方法来构造。
很快,我几乎可以肯定,这是不可能的例子
java.lang.Class
手动。如果我错了,请纠正我。顺便说一句,
很遗憾,我需要更改getclass()的返回值
不是嘲笑吗
getClass()
你有选择吗?ukdjmx9f2#
确定要模拟类对象吗?有没有一个具体的原因,为什么你不能只做以下?
y53ybaqx3#
可以使用javacompiler动态编译源文件,使用urlclassloader加载类示例。
我如何以编程方式编译和示例化java类?
4si2a6ki4#
为什么不在运行时加载类呢?