为什么我们不能使用 Mockito 为参数化构造函数创建间谍

2024-03-11

我的代码中只有参数化构造函数,我需要通过它注入。

我想监视参数化构造函数以注入模拟对象作为我的 junit 的依赖项。

public RegDao(){
 //original object instantiation here
Notification ....
EntryService .....
}

public RegDao(Notification notification , EntryService entry) {
 // initialize here
}

we have something like below : 
RegDao dao = Mockito.spy(RegDao.class);

但是我们是否有一些可以在构造函数中注入模拟对象并监视它的东西?


您可以通过在 junit 中使用参数化构造函数实例化主类,然后从中创建间谍来实现此目的。

假设您的主课是A. Where B and C是它的依赖项

public class A {

    private B b;

    private C c;

    public A(B b,C c)
    {
        this.b=b;
        this.c=c;
    }

    void method() {
        System.out.println("A's method called");
        b.method();
        c.method();
        System.out.println(method2());

    }

    protected int method2() {
        return 10;
    }
}

然后您可以使用参数化类为此编写 junit,如下所示

@RunWith(MockitoJUnitRunner.class)
public class ATest {

    A a;

    @Mock
    B b;

    @Mock
    C c;

    @Test
    public void test() {
        a=new A(b, c);
        A spyA=Mockito.spy(a);

        doReturn(20).when(spyA).method2();

        spyA.method();
    }
}

测试类的输出

A's method called
20
  1. Here B and C是您在类中注入的模拟对象A使用参数化构造函数。
  2. 然后我们创建了一个spy of A called spyA.
  3. 我们检查了是否spy实际上是通过修改受保护方法的返回值来起作用的method2在班上A如果spyA不是实际的spy of A.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我们不能使用 Mockito 为参数化构造函数创建间谍 的相关文章

  • NoInitialContextException:heroku 战争部署

    我一直在开发一个 J2EE 项目 并且在其中使用连接池 也通过部署在 heroku 上的数据库进行访问 我使用以下代码来设置 Connection 对象 Context initContext new InitialContext Cont
  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • 使用 WebDriver 单击新打开的选项卡中的链接

    有人可以在这种情况下帮助我吗 场景是 有一个网页 我仅在新选项卡中打开所有指定的链接 现在我尝试单击新打开的选项卡中的任何一个链接 在下面尝试过 但它仅单击主 第一个选项卡中的一个链接 而不是在新选项卡中 new Actions drive
  • 文本在指定长度后分割,但不要使用 grails 打断单词

    我有一个长字符串 需要将其解析为长度不超过 50 个字符的字符串数组 对我来说 棘手的部分是确保正则表达式找到 50 个字符之前的最后一个空格 以便在字符串之间进行彻底的分隔 因为我不希望单词被切断 public List
  • FileNotFoundException - Struts2 文件上传

    Strange FileNotFoundException使用Struts2上传文件时 这是 JSP 的一部分
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 是否可以从 servlet 内部以编程方式设置请求上下文路径?

    这是一个特殊情况 我陷入了处理 企业 网络应用程序的困境 企业应用程序正在调用request getContext 并将其与另一个字符串进行比较 我发现我可以使用 getServletContext getContextPath 获取 se
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 如何通过注解用try-catch包装方法?

    如果应该在方法调用中忽略异常 则可以编写以下内容 public void addEntryIfPresent String key Dto dto try Map
  • 在 Java 中通过 XSLT 分解 XML

    我需要转换具有嵌套 分层 表单结构的大型 XML 文件
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • 使用 Clearcase 递归签入

    我想将一个目录和所有子目录签入到透明案例中 有具体的命令可以实现吗 目前我正在进入每个目录并手动检查每个文件 我会推荐这个问题 https stackoverflow com questions 33577 how do i perform
  • 如何在 JavaScript 中循环遍历 JSON 关联数组?

    我从服务器收到 JSON 响应 并且必须在 javascript 中循环遍历数组并获取值 但我似乎无法循环遍历它 数组的 JSON 响应如下所示 1 Schools 20 Profiles 31 Statistics 44 Messages
  • 在 Facelet 模板中包含非 Facelet 内容

    有没有办法将 html 文件的内容插入到 Facelet 模板中 Facelets 标签不起作用 因为它仅用于包含 Facelet 内容 换句话说 我正在寻找相当于 JSP include 指令的 Facelets 我可能不明白你需要什么
  • 如何等待一组异步回调函数?

    我的代码在 javascript 中看起来像这样 forloop async call returns an array to its callback 所有这些异步调用完成后 我想计算所有数组的最小值 我怎样才能等到他们所有人呢 我现在唯
  • TFS 电子邮件通知

    当我在 TFS 中添加错误 工作项 并将其分配给用户时 我希望向该用户发送一封电子邮件 此外 如果现有错误的 分配给 发生更改 我希望该用户收到一封电子邮件 当用户在 TFS 2008 中分配了更改的错误时 是否可以向用户发送警报 至少在
  • 指令在 Spray 中如何工作?

    我想了解 Spray 中的指令如何工作 根据文档 http spray io documentation 1 1 SNAPSHOT spray routing key concepts directives 指令的一般结构如下 name a
  • 通过WCF发送图像的有效方法?

    我正在通过从头开始编写 VNC 等自定义远程控制应用程序来学习 WCF LINQ 和其他一些技术 我创建它时考虑了三个主要目标 服务器将在应用程序级别 即无缝窗口 提供 远程控制 而不是完整的桌面访问 客户端可以选择服务器上运行的任意数量的
  • 内存分配和 **argv 参数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我知道我们使用这个论证的目的 我什至知道如何使用这个论证 只有一件事我仍然不明白 程序如何为来自输入的字符串分配内存 argv 在程序开始时
  • Safari 11.0.3 无法识别内容安全策略哈希

    我有一个元标记 其中包含以下指令 然后 我在页面下方有 2 个内联脚本 每个脚本都应与策略中生成的 sha 之一匹配 在 Chrome 和 Firefox 中 我没有收到任何投诉 我的脚本按预期运行 在 Safari 版本 11 0 3 1
  • 在添加另一个标记之前检查现有标记

    谷歌地图 API v2当我等待另一个应用程序完成时 我出于兴趣创建了另一个应用程序 该应用程序一次只能将 1 个标记添加到地图中 我喜欢我做的地图 我目前有这段代码 如果标记已存在 它将清除地图 然后添加另一个标记 但我想要的是它显示一条消
  • `tools:replace="android:supportsRtl"` 可以与 `tools:ignore="AllowBackup"` 一起使用吗?

    正如张贴在https stackoverflow com a 39178185 3286489 https stackoverflow com a 39178185 3286489 解决如下错误 Error Execution failed
  • 当我单击外部提供商按钮时,为什么我的网站会重定向回登录屏幕?

    我正在将 ASP Net MVC4 站点升级到 MVC5 并在此过程中实现新的 OWIN 身份验证方法 我已从空白 MVC5 项目上的帐户控制器复制了操作方法 问题是 当我单击外部提供商按钮 例如 Google 时 我只是再次重定向回登录页
  • 文本文件中字符串中的两个单词

    我正在尝试在字符串中获取两个单词 但我不知道该怎么做 我尝试过 但如果在文本文件中我有 姓名 Penny Marie 它会给我 姓名 Penny 我怎样才能在s1中获得Penny Marie 谢谢 include
  • 如何比较两个字符串在每个索引处的字符?

    我有两个长度相同的字符串 我想按元素比较字符串并为每个索引返回 TRUE 或 FALSE 例如 string1 lt abcd1234 string2 lt abcd1434 result lt T T T T T F T T 到目前为止
  • org.postgresql.util.PGobject 无法转换为 org.postgis.PGgeometry

    当我尝试从 PostGIS 数据库加载点时 我得到以下信息 例外 Caused by java lang ClassCastException org postgresql util PGobject at org hibernatespa
  • Chrome 浏览器操作弹出窗口是否有硬编码的最大高度?

    我无法使 Chrome 扩展程序的 browseraction 弹出窗口高度超过 600 像素 我通过 document body style height 控制它 这是硬编码的最大值吗 我正在 OS X Lion 上使用 Chrome v
  • 如何将数组传递给需要 var args 的 objc 方法(例如...')

    我在库中有一个方法 如下所示 id initWithSomeObjects NSString something NS REQUIRES NIL TERMINATION 我真的很想用数组而不是 var args 来调用它 因为我想传入的对象
  • 如何在 Ubuntu 上写入 Realm 对象服务器

    我已经完成了 Realm 移动平台教程 link https realm io docs realm mobile platform example app cocoa 您创建一个 Swift 任务应用程序 我能够让应用程序和服务器在我的本
  • Firebase Firestore - 关系数据设计方法

    我对 Firebase 完全陌生 我正在尝试了解 关系 数据 1 1 和 1 many 的最佳数据库模型设计 我们正在使用火库数据库 不是实时数据库 说我们有Projects其中可以包含许多Users and a User可以是多个Proj
  • 为什么我们不能使用 Mockito 为参数化构造函数创建间谍

    我的代码中只有参数化构造函数 我需要通过它注入 我想监视参数化构造函数以注入模拟对象作为我的 junit 的依赖项 public RegDao original object instantiation here Notification