是否不鼓励在同一字段上使用 @Spy 和 @InjectMocks ?

2023-12-12

在我现在正在进行的项目中, 我经常看到@Spy and @InjectMocks在田野上一起使用。 我从未在任何教程或其他资源中看到过这种方式。 我用谷歌搜索了这个特定的组合,但没有 在 GitHub 上找到除此线程之外的其他任何内容:https://github.com/mockito/mockito/issues/169

这让我觉得我们正在以一种奇怪的方式使用它。

注意:我认为同时使用这两个注释的原因 有时是有道理的,因为如果你只使用@InjectMocksMockito 尝试使用无参数构造函数实例化该类。 如果您没有无参数构造函数并添加@Spy您可以使用该对象而无需空构造函数。

编辑:另一个重要的用途是你只能存根方法 如果您只使用这两个注释。


@Spy 和 @InjectMocks 不能很好地一起使用(请参阅Google 代码问题 #489 and GitHub 问题 #169),并且对于它们的作用来说,它们根本不应该一起使用,这还不清楚或不常见。在编写良好的 Mockito 用法中,您通常甚至不应该want将它们应用到同一个对象。

  • @InjectMocks作为被测系统的一种替代依赖注入:如果您有一个定义了正确类型的 @Mock 或 @Spy 的测试,Mockito 将使用这些测试的内容初始化 @InjectMocks 实例中的任何字段字段。如果您没有以其他方式构建被测系统以进行依赖项注入(或者如果您使用进行字段注入的 DI 框架)并且您希望用模拟替换这些依赖项,那么这可能会很方便。它可能非常脆弱——不匹配的字段将被默默地忽略并保留null如果未在初始化程序中设置,但仍然是一个不错的注释对于您的被测系统.

  • @Spy, like @Mock,旨在建立测试双打;当您想要存根或验证合作者时,应该使用它。尽管有些情况下您could监视您的被测系统,@Spy 和 @Mock 的意思是用于依赖项,而不是用于您正在测试的功能.

理想情况下,您不应该有任何类在同一个测试中满足这两个角色,否则您可能会发现自己编写的测试辛苦地测试了您已存根的行为,而不是实际的生产行为。无论如何,要准确区分测试涵盖的内容与您所阻止的行为将会更加困难。

当然,如果您尝试使用 Mockito 单独测试单个方法,并且希望在测试另一种方法时对一种方法进行存根调用,则这可能不适用。这可以通过创建被测系统的间谍并模拟其某些方法以避免调用协作者来完成。但是,这也可能表明您的类违反了单一职责原则,并且您应该将类​​分解为多个可以一起工作的独立类。然后,在您的测试中,您可以允许实例仅具有一个角色,并且永远不需要同时使用两个注释。

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

是否不鼓励在同一字段上使用 @Spy 和 @InjectMocks ? 的相关文章

  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • 查找近似字符串匹配并替换为预定义字符串的有效方法

    我需要建立一个NER系统 命名实体识别 为简单起见 我通过使用近似字符串匹配来完成此操作 因为输入可能包含拼写错误和其他细微修改 我遇到过一些很棒的图书馆 例如 模糊模糊甚至更快快速模糊测试 但不幸的是我没有找到一种方法来返回匹配发生的位置
  • 使用 php 读取 csv 文件的最简单方法,然后选择一个特定值

    预先感谢您的时间 帮助 我是一个学习 php 的新手 所以请记住这一点 第一个问题 我需要一个读取 csv 文件的 php 脚本 第二个问题 如何回显该文件中的特定单元格 行和行 列 我在类似的回复中找到了这个脚本 该脚本完美地读取了整个文
  • 为什么 NSSet/NSMutableSet/NSCountedSet 不强制不可变对象作为条目?

    NSDictionary 键是 id 但集合的值只是 id 文档表明它们的值被保留 根据设置集合编程主题的基础知识 docs 但是 您可以修改单个对象本身 如果它们支持修改 如果修改对象 这可能会影响该对象的哈希值 从而影响查找 我认为 N
  • Oracle PL/SQL - 如何转义冒号 (:),被误解为绑定变量

    我有一个小的 PL SQL 脚本 用于尝试在两个 Oracle 数据库实例之间复制数据 我正在调用 SQL 脚本 经过清理 sqlplus username email protected 1434 SERVICENAME copyTabl
  • Azure 通知中心标签不创建也不更新 - 以特定用户为目标

    您好 我正在使用 Web api 作为后端服务 其中使用 Azure 通知中心 我需要根据条件业务逻辑通知登录用户 简而言之就是针对特定用户 我从中提取代码this文章 一切正常但是标签不创建也不更新 我需要帮助 这是我的代码片段 It r
  • JavaFX 超高清 (4K) 视频

    我想使用 JavaFX 2 MediaPlayer 播放超高清 4K 视频 但只得到黑屏 在 JRE 8 Windows 7 上运行 没有错误消息 有谁知道 JavaFX 是否可以播放超高清 4K 视频或者我可以在哪里找到这些信息 谢谢 我
  • 如何使用 Discord.js 检查消息作者是否具有管理员角色?

    我正在构建一个 Discord 机器人 我想要一个if仅当消息作者在公会中具有管理员角色时才会执行该语句 我尝试过拥有特定于角色的权限 但这意味着机器人所在的所有服务器上都必须有完全相同的名称角色 如何检查消息作者是否具有管理员角色 该角色
  • ASP.NET MVC - TempData - 好的或坏的实践

    我正在使用AcceptVerbsScott Gu 的 Preview 5 博客文章中详细介绍了处理 ASP NET MVC 中表单条目的方法 用户通过 GET 获取一个空表单 用户通过 POST 将填写的表单发布到同一操作 该操作验证数据
  • Parallel.ForEach 和 async-await [重复]

    这个问题在这里已经有答案了 我有这样的方法 public async Task
  • 如何使用Qt禁用窗口的关闭按钮?

    我想在操作开始时禁用窗口 主应用程序窗口 上的关闭按钮 以便用户无法退出应用程序并在操作完成时再次启用它 我怎样才能在 Qt 应用程序中做到这一点 我的平台是windows 7 或者 如果用户按下关闭按钮并退出应用程序 我可以显示一条消息
  • Symfony2获取位于security.yml中的access_control参数

    我试图获取位于 security yml 中的 access control 参数作为自定义服务中的数组 就像获取 role hierarchy 参数一样 我认为它可以使用以下代码 accessParameters this gt cont
  • 在 Woocommerce 档案页面上显示特定产品属性

    我想在每个产品的商店页面上显示我选择的一些特定产品属性 有必要显示属性的名称及其值 我开始编写代码 我想至少打印名称 但我只显示最后一个属性的名称 add action woocommerce after shop loop item ad
  • 全局、函数、静态类方法

    假设您有一个唯一的对象 并且它被所有其他类和函数使用 类似于 application 您将如何在函数中访问该对象 在每个函数中使用全局变量 global application application gt doStuff 创建一个函数 例
  • 如何调试 JavaScript 错误?

    如何使用 Firebug 调试 java 脚本错误 复制 如何在 Firebug 的外部 JS 脚本中设置断点 使用 FireBug 进行调试 只需检查发生错误的行 然后在该行之前编写一个 调试器 调用 debugger Will invo
  • 在asp.net中的标签中显示SQL查询结果

    我试图在标签中显示 SQL 查询结果 但它没有显示 这是我的代码 string result SELECT ACTIVE FROM dbo test WHERE ID ID Text SqlCommand showresult new Sq
  • ImportError:无法导入名称请求

    每当我使用终端 ubuntu 运行 py 代码时 我收到这个错误 Traceback most recent call last File twitterstream py line 15 in
  • 由于我们的 Sybase JDBC 驱动程序,Charset.availableCharsets 引发 NullPointerException

    我遇到了阻塞问题与我的安装 JDK 1 7 基本上我有以下NPE 10 19 17 548 main ERROR o s t w s TestDispatcherServlet Context initialization failed o
  • 运行 pyinstaller 应用程序时导入错误

    我编写了一个 Python 应用程序 它使用 from PIL import Image 我想分发此应用程序的打包版本 以便使用它的任何人都不需要安装所有依赖项 为此我用过pyinstaller 但没有取得太大成功 我跑 pyinstall
  • 获取弹出页面的公共变量

    我正在实例化另一个页面 并为其公共属性之一 SomeValue 分配一个值 如下所示 btnGotoOtherPage Clicked async sender e gt OtherPage otherpage new OtherPage
  • 是否不鼓励在同一字段上使用 @Spy 和 @InjectMocks ?

    在我现在正在进行的项目中 我经常看到 Spy and InjectMocks在田野上一起使用 我从未在任何教程或其他资源中看到过这种方式 我用谷歌搜索了这个特定的组合 但没有 在 GitHub 上找到除此线程之外的其他任何内容 https