我们可以用PowerMock创建一个java.lang.Class的模拟实例吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了我们可以用PowerMock创建一个java.lang.Class的模拟实例吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2223字,纯文字阅读大概需要4分钟。
内容图文
![我们可以用PowerMock创建一个java.lang.Class的模拟实例吗?](/upload/InfoBanner/zyjiaocheng/787/21fecd051a374d0b917fd1d9de49ea01.jpg)
我需要编写一个测试来模拟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:
我也尝试了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的模拟实例
谢谢
解决方法:
根据这个声明,
…
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
…
PowerMock(使用Objenesis库)尝试实例化java.lang.Class,它只能由JVM实例化.从docs开始:
Class has no public constructor. Instead Class objects are constructed automatically by the Java Virtual Machine as classes are loaded and by calls to the defineClass method in the class loader.
不久,我几乎可以肯定,手动生成java.lang.Class的实例是不可能的.如果我错了,请纠正我.
顺便说说,
Unfortunately I need to change the return value of the getClass().getName()
是不是嘲笑getClass()方法是一个选项?
内容总结
以上是互联网集市为您收集整理的我们可以用PowerMock创建一个java.lang.Class的模拟实例吗?全部内容,希望文章能够帮你解决我们可以用PowerMock创建一个java.lang.Class的模拟实例吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。