有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带反射的java Jmock

我有一个要求,我需要模拟com。太阳部署安全当访问该类中的printWarningsIfRequired时,DeployManifestChecker并返回null。自从部署以来。jar不在我的构建路径中,我无法直接模拟它。我正在寻找一种使用Java反射API实现它的方法。但我不确定如何用Class参数调用mock方法。 方法调用(null,新类[]{claz1});是失败的例外

这是密码

    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) 个答案

  1. # 1 楼答案

    您在中声明的目标是使用反射,但如果必须这样做,我只会创建一个仅测试的jar,其中包含一个模仿com的接口。太阳部署安全部署检查器类。然后使用jmock模拟替身

    我以前也采用过这种方法,当时我无法像你一样将实际的类包含在测试设置中,而且它的工作方式非常好。只需确保你的替身没有进入运行时类路径,并且只在测试范围内