当前位置: 首页 > 知识库问答 >
问题:

带反射的Jmock

孔鸿哲
2023-03-14

我有一个需求,我需要模拟com.sun.deploy.security.DeployManifestChecker并在访问该类中的printWarningsIfRequired时返回null。因为Deploy.jar不在构建路径中,所以我不能直接模拟它。我正在研究一种使用Java反射API实现它的方法。但是我不确定如何用类参数调用mock方法。method.invoke(null,new class[]{claz1});因NP异常而失败。

这是代码

    Mockery context ;
    final Class<?> claz1;
    try {
     Class   mclaz = Class.forName("org.jmock.Mockery");
        context =   (Mockery) mclaz.newInstance();

        claz1 = Class.forName("com.sun.deploy.security.DeployManifestChecker");
        final Method method = mclaz.getDeclaredMethod("mock",
                new Class[]{Class.class} ); 


        method.invoke(null, new Class[]{claz1});
   } catch (ClassNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

共有1个答案

曹泉
2023-03-14

您声明的目标是使用反射,但如果我必须这样做,我只需创建一个仅供测试的jar,其中包括一个模拟com.sun.deploy.security.DeployManifestChecker类的接口。然后使用jmock模拟替身。

以前,当我不能像您一样在测试设置中包含实际的类时,我就采用了这种方法,它的工作方式非常出色。只需确保您的替身不会进入运行时类路径,并且只保留在测试范围内。

 类似资料:
  • 问题内容: 此源输出这是怎么回事? 如果我们将主要功能更改为: 它输出。 实际发生了什么? 问题答案: 此源代码打开了一些有趣的Java技术。让我们一一检查。 首先,我们需要了解代码流程。代码的哪一部分将首先执行? 静态初始化块。为什么?让我们参考Java语言规范(12.4): 类的初始化包括执行其静态初始化程序和在该类中声明的静态字段(类变量)的初始化程序。 什么时候发生?再次来自JLS(12.

  • 问题内容: 是否有与.NET Reflector等效的Java ? 编辑:更具体地说,反编译是我的追求。 问题答案: 我几乎不知道.NET Reflector的功能在包括Eclipse在内的几乎所有Java IDE中都可用。只需将文件添加到项目中,就可以像浏览自己的类一样浏览其类。 对于反编译器方面(与纯类浏览器相反),还有一些替代方法。JDK工具仅反编译为字节码,因此获取源代码并没有什么用(但是

  • ILRuntime中的反射 用C#开发项目,很多时候会需要使用反射来实现某些功能。但是在脚本中使用反射其实是一个非常困难的事情。因为这需要把ILRuntime中的类型转换成一个真实的C#运行时类型,并把它们映射起来 默认情况下,System.Reflection命名空间中的方法,并不可能得知ILRuntime中定义的类型,因此无法通过Type.GetType等接口取得热更DLL里面的类型。而且IL

  • 我有一个映射定义为 其中定义如下: 反向映射是使用处理的。如何为反向映射指定自定义映射?

  • 主要内容:反射的用途,查看元数据反射(Reflection)是指程序可以访问、检测和修改它本身状态或行为的一种能力,反射中提供了用来描述程序集、模块和类型的对象,可以使用反射动态地创建类型的实例,并将类型绑定到现有对象,或者从现有对象中获取类型,然后调用其方法或访问其字段和属性。 如果代码中使用了特性,也可以利用反射来访问它们。 反射的用途 C# 中反射具有以下用途: 在运行时查看视图属性信息; 检查装配中的各种类型并实例化这些