Powermock - 模拟超级方法调用

2023-11-24

这是我的代码 -

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;

import org.powermock.core.classloader.annotations.*;
import static org.powermock.api.support.SuppressCode.*;

class BaseService {
    public int save() {
        validate();
        return 2;
    }

    public static int save2() {
        return 5;
    }

    public void validate() {
        System.out.println("base service save executing...");
    }
}

class ChildService extends BaseService {
    public int save() {
        System.out.println("child service save executing...");
        int x = super.save2();
        int y = super.save();
        System.out.println("super.save returned " + y);
        load();
        return 1 + x;
    }

    public void load() {
        System.out.println("child service load executing...");
    }
}

@RunWith(PowerMockRunner.class)
@PrepareForTest(BaseService.class)
public class PreventSuperInvocation {

    @Test
    public void testSave() throws Exception {

        org.powermock.api.support.Stubber.stubMethod(BaseService.class,
                "save2", 4);
        suppressMethod(BaseService.class, "save");
        ChildService childService = new ChildService();
        System.out.println(childService.save());
    }

}

我想嘲笑super.save() in ChildService班级。但我找不到办法做到这一点。suppressMethod()仅抑制并返回默认值(在上述情况下为 0)。还有像这样的事情MemberModifier, Stubber, MethodProxy仅适用于静态方法。

在Powermock中有没有办法做到这一点?

我正在使用 Powermock 1.5 和 Mockito 1.9.5。


看来jMockit可以满足我的需要。也许我会将这个问题发布到 powermock 邮件列表中。同时下面应该足够了。 包learning_mocking_tools.learning_mocking_tools; 包learning_mocking_tools.learning_mocking_tools;

import mockit.*;

import org.junit.Assert;
import org.junit.Test;


class BaseService {
    public int save() {
        validate();
        return 2;
    }

    public static int save2() {
        return 5;
    }

    public void validate() {
        System.out.println("base service save executing...");
    }
}

class ChildService extends BaseService {
    public int save() {
        System.out.println("child service save executing...");
        int x = super.save2();
        int y = super.save();
        System.out.println("super.save returned " + y);
        load();
        return 1 + y;
    }

    public void load() {
        System.out.println("child service load executing...");
    }
}

@MockClass(realClass = BaseService.class)
class MockBase {

    @Mock
    public int save() {
        System.out.println("mocked base");
        return 9;
    }
}

public class PreventSuperInvocation {

    @Test
    public void testSave() throws Exception {
        MockBase mockBase = new MockBase();
        Mockit.setUpMock(BaseService.class, mockBase);

        ChildService childService = new ChildService();
//      int x = childService.save();

        Assert.assertEquals(9 + 1, childService.save());

        Mockit.tearDownMocks();
    }

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

Powermock - 模拟超级方法调用 的相关文章

  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • createImage(int width, int height) 的问题

    我有以下代码 作为游戏的一部分每 10 毫秒运行一次 private void gameRender if dbImage null createImage returns null if GraphicsEnvironment isHea
  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 如何在 Spring 属性中进行算术运算?

  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐

  • AlarmManager 在 S5 Neo 的睡眠模式下无法按预期工作

    我在服务中使用 AlarmManager 每分钟触发一次 PendingIntent pendingIntent PendingIntent getService getApplicationContext 0 getUpdateServi
  • 修复指定 PU 时出现的“无法解析持久性单元...”错误

    截至今天 2010 11 12 我正在运行 Glassfish 3 1 SNAPSHOT 我正在使用嵌入式 EJBContainer 在类路径上 如 EJBContainer 所报告的 我有一个 META INF persistence x
  • Eclipse:在导出为可运行 jar 时包含源代码

    我了解如何在 eclipse 中创建可运行的 jar 文件时包含其他所需的库或外部资源 但我没有看到也包含 src java 文件的选项 我怎样才能做到这一点 In the Export gt Jar File对话框中您可以选择包含源文件和
  • Java文件上传到MySQL [重复]

    这个问题在这里已经有答案了 我有这个问题java io File从选择一个JFileChooser上传上述内容java io File具有此表结构的 MySQL 表的对象 COL NAME COL TYPE ATTRIBUTES EXTRA
  • 数组中成员的默认值是多少?

    我像这样实例化一个数组 int array new int 4 这四个成员的默认值是多少 是null 0还是不存在 它是 0 它不能为 null 因为 null 不是有效的int value 来自 C 5 规范第 7 6 10 4 节 新数
  • 如何将拖放事件侦听器附加到 React 组件

    我正在构建一个允许将本地文件拖放到 div 上的组件 然后输出有关已删除文件的信息 我的问题是我不知道如何正确附加事件监听器drop and dragover创建我的组件时 我的应用程序组件是我所有逻辑所在的位置 放置和拖动的处理程序 我创
  • 原则 2 - 使用数据库中的视图生成实体

    是否可以使用 Doctrine 2 从数据库生成视图 我解释 我的数据库包含一些我想要使用的视图 但我不知道如何生成这些视图 就我而言 我有两个表和一个视图 该视图在每个表中选择几列 我只想将此视图放在项目的文件夹 Entity 中 Dat
  • 使用 Google Compute Engine 上的应用程序默认凭据访问 Sheets API

    ADC 应用程序默认凭据 工作流程是否仅支持 Google Cloud API 例如 支持 Google Cloud Storage API 但不支持 Google Sheet API 我指的是google auth 的默认方法 不必在代码
  • 绑定参数在 SQLite3 中如何工作(用最少的示例)?

    有人建议在 SQLite 中使用参数绑定来加速重复查询 但是 如果我有多个绑定参数 它就不起作用 我没有看到我的错误 所有 SQLite 函数都返回 SQLITE OK 下面 我写了一个最小的例子 它创建一个表 创建三个条目 然后查询两次
  • 如何调用 Oracle PL/SQL 对象超级方法

    我想调用一个重写的 PL SQL 方法 这是一个例子 super class create or replace type test as object n number member procedure proc SELF in out
  • 从特定列中选择值并跳过 R 中的 NA 值

    我正在处理癌症登记数据 在以下数据示例 ex data 中 变量id and 诊断 yr代表癌症诊断的 ID 和年份 列x 2005 to x 2010 and y 2005 to y 2010分别代表每年 2005年至2010年 的x和y
  • 如何从 log4j 附加程序中排除包

    我有配置文件 log4j properties 请参阅下面的包和最后的问题 com bitguiders package1 com bitguiders package2 com bitguiders package3 com bitgui
  • 分配给事件的 lambda 是否会阻止所属对象的垃圾回收?

    假设您有一个具有事件属性的类 如果您在本地上下文中实例化此类 而没有外部引用 则为事件分配 lambda 表达式是否会阻止该实例被垃圾回收 var o new MyClass o MyClassEvent args gt Will o be
  • 在 Angular 6 中使用 HTML 锚链接片段

    我正在处理一个 Angular 6 项目 其中我已禁用 删除了 hash location strategy 该策略从 URL 中删除了 由于此更改 链接具有 li a Contact Settings a ul class child l
  • 从返回引用的函数提前返回的最佳方法

    假设我们有一个以下形式的函数 const SomeObject SomeScope ReturnOurObject if SomeCondition return early return return ourObject 显然上面的代码有
  • 是否需要在对象前面使用&符号?

    由于现在默认情况下对象是通过引用传递的 因此是否可能存在一些特殊情况 obj有道理吗 对象使用不同的引用机制 object更多的是参考中的参考 你无法真正比 较它们 看对象和引用 PHP 引用是一个别名 它允许两个不同的变量写入相同的值 从
  • Docker 不会创建新容器,而是重新创建正在运行的容器

    所以我有以下问题 我正在使用 docker compose 来构建和启动两个容器 我使用不同的 docker compose yml 文件 图像和容器名称不同 多次执行此操作 并且工作正常并且三个容器并行运行 唯一的区别是 一个容器公开特定
  • 如何从 Java EE 应用程序提供套接字服务?

    我们希望在 Java EE 应用服务器 JBoss 4 2 3 中处理一些客户端请求 我读到Java EE 规范不允许从企业 bean 打开套接字 但该规范没有提出其他选择 具体来说 企业 Bean 不应 侦听 接受来自网络套接字的连接或多
  • iOS9 不受信任的企业开发人员,没有信任选项

    这不是重复的不受信任的应用程序开发人员 从 iOS9 开始 就没有信任企业版本的选项了 有人找到解决方法吗 在 iOS 9 1 及更低版本中 请转至设置 常规 配置文件 点击你的Profile 轻按Trust button 在 iOS 9
  • Powermock - 模拟超级方法调用

    这是我的代码 import org junit Test import org junit runner RunWith import org powermock modules junit4 PowerMockRunner import