首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带反射的Jmock

带反射的Jmock
EN

Stack Overflow用户
提问于 2014-02-21 08:57:35
回答 1查看 183关注 0票数 0

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

以下是代码

代码语言:javascript
复制
    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();
    }
EN

回答 1

Stack Overflow用户

发布于 2014-02-21 09:07:11

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21923057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档