我们可以使用 PowerMock 创建 java.lang.Class 的模拟实例吗?

2024-06-24

我需要编写一个模拟 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 的模拟实例

谢谢


根据这个声明,

...

在 java.lang.reflect.Constructor.newInstance(Constructor.java:526)

...

PowerMock(使用 Objenesis 库)尝试实例化java.lang.Class,只能由 JVM 实例化。从docs http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html:

类没有公共构造函数。相反,Class 对象是由 Java 虚拟机在加载类时通过调用类加载器中的 DefineClass 方法自动构造的。

很快,我几乎可以肯定不可能实例化java.lang.Class手动。如果我错了,请纠正我。

顺便一提,

不幸的是我需要更改 getClass().getName() 的返回值

不是嘲讽getClass()方法适合您吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们可以使用 PowerMock 创建 java.lang.Class 的模拟实例吗? 的相关文章

随机推荐

  • 如何自动将实体模型更改部署到数据库?

    目前我使用 Visual Studio 数据库项目 因此我可以一键将更改部署到数据库并将数据保留在数据库中 现在我希望能够在实体框架中创建模型并一键部署 所以我得到了从实体框架创建数据库的sql脚本 我可以运行此脚本来创建数据库 但我想将数
  • SKAction 中的选择器是什么:perform(_:onTarget:)

    文档说 宣言 https developer apple com reference spritekit skaction 1417764 perform class func perform selector Selector onTar
  • 数字类型的大括号初始化。它们是0初始化的吗?

    我想确定以下内容 int i double x 将所有变量初始化为 0 我的编译器似乎在所有模式下都会这样做 但我需要确保标准明确规定了这一点 欢迎对 C 11 标准的任何引用 标准对此进行了规定 所有引文均来自 N3337 T x is
  • 错误:找不到基本名称消息的包。AndroidJpsBundle,区域设置 en_US

    任何人 请帮助我 由于以下错误 我无法运行 Android 应用程序 java util MissingResourceException 找不到基本名称的包 messages AndroidJpsBundle 区域设置 en US 位于
  • .net core中的多个OpenIdConnect授权

    我在 net core 中进行多个 OpenIdConnect 授权时遇到问题 我想要实现的目标 想象一下 2 个 openid 提供商 OpenID Main OpenID Special 两者都返回 id 令牌 角色等 现在想象一下 大
  • node.js http设置请求参数

    我有一个 node js 应用程序 我想通过使用调用 REST apihttp request https nodejs org api http html http http request options callback 这是我的代码
  • 为什么将未使用的函数参数值转换为 void?

    在一些C项目中 我看到过这样的代码 static void l alloc void ud void ptr size t osize size t nsize void ud void osize some code not using
  • 为什么背景图片没有填满整个div

    我有以下代码显示SPAN里面一个DIV然后另一个DIV在它下面显示一些文本 我遇到的问题是当我调整浏览器大小时 文本和背景图像变得不合适 这是图像未填满的屏幕截图DIV 另外 当我调整大小时 文本全部错位 这是 HTML div div d
  • 使用 Firebase 数据 Swift、Xcode 7 填充 UITableViewController

    我正在与swift in Xcode 7 我完全陌生Swift Xcode and Firebase 我想要三个UITableViewController在我的 iOS 应用程序中 前两个TableView controllers将需要动态
  • 在 Angular 2 中将时间 hh:mm:ss 转换为 GMT 时间格式

    Input 时间 21 00 00 输出应该是 时间 2017年12月20日星期三21 00 00 GMT 0530 IST OR 时间 2017 12 20 21 00 00 您的输入是 21 00 00 将您的输入拆分为 使用下面的JS
  • Python:从命令行运行时包含库文件夹

    我有一个目录结构 root dir src p1 py lib init py util1 py util2 py 我想跑src p1 py它使用lib util1 py使用导入语句import lib util1 as u1 当我使用 P
  • 如何在 PHP 中正确启动会话?

    我最近正在学习有关如何为我的网站制作自定义 CMS 的教程 我目前正在制作后端 以便用户可以创建和编辑页面 该教程有点旧 因此各种功能已被弃用 我能够修复大多数问题 除了 session register 功能 我在很多网站上看到 包括这个
  • 单击时在新窗口中打印图像的最简单方法是什么?

    我正在尝试为图像创建一个简单的单击打印链接 我希望发生的是当单击该链接时 会打开一个包含图像的新窗口 并且浏览器会打开打印命令对话框 我的问题是这是否可以仅通过 URL 参数实现 或者通过启动页面上的锚元素实现 或者我是否必须使用 java
  • Symfony 权限被拒绝

    谁能帮我解决我收到的以下错误消息 我终于在虚拟机上安装了 Symfony 它似乎工作正常 除了我偶尔收到这样的消息 1 2 ContextErrorException Warning SessionHandler read open var
  • 如何在批处理文件中重复%random%命令?

    我想在有限的时间内重复批处理文件中的命令 此命令 echo random random random random random random random random random random 不是无限的 只为前任40次具有不同的数字
  • 如何使用 Node.js 创建 RAM 磁盘?

    我想使用 Node js 以编程方式创建 RAM 磁盘 无论底层操作系统是什么 应支持 OS X Linux 和 Windows 实现这一目标的最佳方法是什么 当然 我可以将命令作为子进程运行 但我需要为每个操作系统单独编写此代码 出于显而
  • Power Query 根据 Excel 列列表过滤 SQL 视图

    有没有办法使用 Power Query 根据 Excel 表列中的值列表过滤 SQL 视图 我有一个返回大量数据 数百万条记录或属性 的 SQL 视图 用户希望根据属性 ID 的 Excel 表格列进行过滤 我知道我可以根据 Power 查
  • 如何使用图形突出显示控件中的换行文本?

    我需要使用填充矩形突出显示控件中的特定字符 我可以使用以下命令获取文本未换行时的位置Graphics MeasureString 方法如下 var size g MeasureString tempSearchText style Font
  • Microsoft T-SQL 到 Oracle SQL 的转换

    我已经使用 T SQL 多年了 但我刚刚转到一个需要编写一些 Oracle 内容的组织 可能只是简单的 CRUD 操作 至少在我适应之前是这样 我不会将数据库从一个数据库迁移到另一个数据库 只是从应用程序开发的角度与现有 Oracle 数据
  • 我们可以使用 PowerMock 创建 java.lang.Class 的模拟实例吗?

    我需要编写一个模拟 java lang Class 类实例的测试 这可以通过 PowerMock 实现吗 我尝试执行以下操作 PowerMock createMock Class class 结果是 java lang IllegalAcc