模拟继承的受保护方法

2023-12-20

我这里有我的问题的简化版本。 A类有一个受保护的方法。 B类继承了这个方法。

public class A{
    protected String getString(){
        //some Code
    }
}


public class B extends A{
    public void doSomething(){
        //someCode
        String result = getString();
    }
}

我现在用 Mockito 编写一个单元测试,它位于另一个包测试中,我想测试doSomething()方法。为此,我需要模拟 getString() 调用。由于该方法受到保护并且我的测试类位于不同的包中,因此我无法使用doReturn(...).when(classUnderTest).getString()。问题是,我监视 B 类。所以我不能使用mock(new B(), Mockito.CALLS_REAL_METHODS).

我尝试通过反射获取受保护的方法:

Method getString = classUnderTest.getClass().getDeclaredMethod("getString");
getString.setAccessible(true);

但我不知道如何在里面使用它doReturn().


您可以使用“覆盖和子类”

B b = new B() {
  @Override
  protected String getString() {
    return "FAKE VALUE FOR TESTING PURPOSES";
  };
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模拟继承的受保护方法 的相关文章

随机推荐

  • devops REST API:无法使用 PATCH 方法更新工作项状态

    我正在使用 DevOps Rest api 来获取一些信息 POST 方法对我来说效果很好 我想更新我的工作项目的状态 为此 我需要使用 PATCH 方法 这不起作用 并且没有给出任何类型的错误 https learn microsoft
  • 在已 root 的 Android 设备上读取或写入 /data 中的文件 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试以编程方式读取 写入已 root 的手机上 data 目录中的文件 我先来外壳执行 su确保我的程序获得超级用户访问权限 效
  • 更改活动选项卡视口大小,如开发工具响应视图

    在 Chrome 扩展中 我想更改视口大小 例如 DevTools 响应式视图 我正在调查https developer chrome com extensions tabs type ZoomSettingsMode https deve
  • 删除mysql表中的所有记录[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试从表中删除所有记录 我的查
  • Django:测试页面是否已重定向到所需的网址

    在我的 Django 应用程序中 我有一个身份验证系统 因此 如果我不登录并尝试访问某些个人资料的个人信息 我会被重定向到登录页面 现在 我需要为此编写一个测试用例 我得到的浏览器响应是 GET myprofile data some id
  • 如何在 MySQL 数据库中存储 UTC ISO8601 日期?

    我有数千个以下格式的日期 2011 10 02T23 25 42Z 又名 UTC 格式的 ISO 8601 我应该使用什么 MySQL 数据类型在 MySQL 数据库中存储这样的 ISO8601 日期 例如 Datetime timesta
  • 如何在 Keycloak 中指定刷新令牌的生命周期

    Keycloak 刷新令牌的生命周期为 1800 秒 refresh expires in 1800 如何指定不同的过期时间 在 Keycloak 管理 UI 中 只能指定访问令牌的生命周期 正如评论中指出的 库巴西蒙诺夫斯基 https
  • 为什么要在mvvm中的viewmodel和view上实现一个接口

    我对 MVVM 模式还很陌生 所以请耐心等待 我见过 wpf mvvm prism 中的实现 其中所有视图都倾向于将 IView 作为最顶层的界面 然后 各个模块中的视图都有一个特定于视图的接口 如 IViewA IViewB 等 它们实现
  • 移动 CALayer(添加动画)

    好吧 我有一个 CALayerlayer我想用 CADisplaylink 移动它 喜欢 layer center CGPointMake layer center x 10 layer center y 10 但我不能用center or
  • 为任何方法创建 Func 或 Action(在 C# 中使用反射)

    我的应用程序根据设置动态加载 dll 来自数据库 文件 类和方法名称 为了方便 加速和减少反射的使用 我想要一个缓存 遵循以下想法 MethodInfo Invoke 没有什么表现性的 反射性能 创建委托 C 属性 https stacko
  • ASP.Net MVC:在现有项目上从“无身份验证”更改为“个人用户帐户”

    我正在学习有关 ASP Net MVC 的课程 并且达到了该课程依赖于标准 注册 和 登录 功能的程度 当您在创建项目时选择 个人用户帐户 时 Visual Studio 会自动构建这些功能 显然 较新版本的 Visual Studio 现
  • 如何在异步任务中实现此图像视图?

    我有一个 url 传递给一个活动 我试图全屏显示 url 中的图像 但是它会引发主网络线程异常 据我所知 我相信我必须将该方法放入异步任务中 但我似乎根本无法理解它 那么我该如何将此方法放入异步任务中呢 全屏图像视图 java public
  • PS1 环境变量在 mac 上不起作用

    我有一个脚本 不是我自己写的 它在我的命令提示符中显示 git 分支 svn 分支 有谁知道为什么这在 mac 上不起作用 它在linux下完美运行 From https github com xumingming dotfiles blo
  • Observable .catch 不是一个函数

    从 Unix 环境运行代码时 我遇到了这个非常烦人的错误 当我通过本地运行代码时 这工作正常ng serve 但是当我将代码部署到我的服务器时 此错误会停止所有程序执行 ERROR TypeError this http get catch
  • 如何防止logback/slf4j解析换行符

    我使用 logback 和 SLF4j 来登录我的应用程序 我有一个包含换行符的字符串 它是字符串值的一部分 但并不表示新行 当我打印字符串时 logback 会在新行中打印它 如何防止这种情况发生 Code String str geor
  • Cygwin/bash 别名中的空格?

    我正在尝试为 Cygwin bash shell 设置别名 以运行标准 Windows C Program Files 子目录中包含的程序 不幸的是 alias 命令确实不喜欢目录名称中的空格 而且我尝试过的任何方法似乎都不起作用 我正在尝
  • pymysql fetchall() 结果作为字典?

    有没有办法使用 pymysql 将 fetchall 的结果作为字典获取 PyMySQL 包括一个DictCursor 它做我认为你想要的 使用方法如下 import pymysql import pymysql cursors conne
  • 跨线程的 HTTPContext

    我需要为每个网络请求实例化一个单例对象 以便数据处理一次并在整个请求期间有效 我正在使用HttpContext Current Items在 HTTP 请求期间共享数据 一切都很好 直到我们需要单例对象实例跨多个线程 我想到的第一件事是将
  • C++,在堆上创建的对象与本地创建的对象 - 返回指针时

    这是来自的后续问题在 C 中安全 在 C 中不安全 简单返回指针 引用 https stackoverflow com questions 8456335 safe in c sharp not in c simple return of
  • 模拟继承的受保护方法

    我这里有我的问题的简化版本 A类有一个受保护的方法 B类继承了这个方法 public class A protected String getString some Code public class B extends A public