如何在单元测试中模拟JPA存储库的find方法

2023-12-24

我正在尝试 UT 我的小项目,但遇到了问题。 我的应用程序使用简单的分层架构,我不能碰巧UT服务层。 事实上我想嘲笑班级Crud存储库 https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html来自 Spring 数据。 我正在尝试模拟我的存储库之一的 findAll 方法,该方法扩展了此类,但mockito无法模拟接口。 除了自己创建豆子并填充它之外,还有其他方法可以简单地做到这一点吗?

[更新] 这是存储库代码:

package fr.kaf.interview.Repository;

import fr.kaf.interview.model.Book;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BookRepository extends CrudRepository<Book,Long> {
}

这是UT:

@ExtendWith(MockitoExtension.class)
class BookServiceTest {


@Mock
private BookRepository bookRepository;

@InjectMocks
private BookService bookService;

@Test
public void should_get_All_books_from_database() {
    //Given

    Person author = new Person();
    author.setFirstName("Ka");
    author.setLastName("AwQl");

    Book firstBook = new Book();
    firstBook.setTitle("One Book");
    firstBook.setAuthors(singletonList(author));

    Book secondBook = new Book();
    secondBook.setTitle("Second Book");
    secondBook.setAuthors(singletonList(author));

    given(bookRepository.findAll()).willReturn(asList(firstBook, secondBook));

    //When
    List<Book> allBooks = bookService.getAllBooks();

    //Then
    assertThat(allBooks).containsExactly(firstBook, secondBook);

}

}

我想知道问题是否在于 Mockito 不确定如何注入bookService进入 Spring TestContext。

我会尝试用注释来注释测试@ExtendWith(SpringExtension.class)正如“底部的建议”编写测试依赖注入 https://junit.org/junit5/docs/current/user-guide/#writing-tests-dependency-injectionJUnit5 用户指南的“部分。

该注释的源代码是here https://github.com/spring-projects/spring-framework/blob/master/spring-test/src/main/java/org/springframework/test/context/junit/jupiter/SpringExtension.java.

我也认为有可能given Mockito 的 BDD 风格 https://static.javadoc.io/org.mockito/mockito-core/2.24.0/org/mockito/Mockito.html#bdd_mockitowhen\\then风格可能会产生不同的结果。

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

如何在单元测试中模拟JPA存储库的find方法 的相关文章

  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • 如何解决 onEditCommit 事件上的类型不匹配错误?

    我在 Fxml 中使用 onEditCommit 事件在用户编辑数据后检索数据 FXML 代码
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • Spring Stomp over Websocket:流式传输大文件

    我的SockJs客户端在网页中 发送帧大小为16K的消息 消息大小限制决定了我可以传输的文件的最大大小 以下是我在文档中找到的内容 Configure the maximum size for an incoming sub protoco
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 为什么 ConcurrentHashMap::putIfAbsent 比 ConcurrentHashMap::computeIfAbsent 更快?

    使用 ConcurrentHashMap 我发现computeIfAbsent 比putIfAbsent 慢两倍 这是简单的测试 import java util ArrayList import java util List import
  • Enzyme - 测试嵌套组件是否正确呈现

    我正在尝试测试当通过简单的布尔值更新状态时 在父组件中其子组件是否正确呈现 在父组件下面 class Parent extends Component render const isReady this state const props
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这

随机推荐

  • 柯尔莫哥洛夫复杂度近似算法

    我正在寻找一种算法 可以计算给定输入字符串的柯尔莫哥洛夫复杂度的近似值 因此 如果 K 是字符串 S 的柯尔莫哥洛夫复杂度 并且 t 代表时间 那么该函数的行为将如下所示 limit t gt inf K approx t S K 理论上
  • 如何使用 PowerShell cmdlet 对 PowerShell 脚本文件进行完整语法检查

    我正在编写一个控制台应用程序来验证 PowerShell 脚本语法 我的请求是验证 PowerShell 脚本而不执行该脚本 我在下面的 PowerShell 命令中发现了这个命令 它可以在不执行脚本的情况下执行语法检查 Get Comma
  • Self.Type 无法直接转换为 AnyClass 以扩展为 swift 中的 Objective-C 类

    我正在尝试创建结构方法来创建具有正确笔尖名称的 UIViewController 以修复 iOS8 默认初始化程序问题 为此 我添加了扩展 extension UIViewController class func create gt Se
  • Jquery 选择器中的引号

    我读过几个关于类似问题的答案 人们总是说单引号和双引号之间没有区别 问题是我有一小行代码似乎很重要 li data type veg append v 这段代码做了我希望他做的事情 在链接末尾放置一个 v 但是这段代码 li data ty
  • ApacheConnectorProvider:泽西客户端 2.5.1

    Ref https jersey java net documentation latest user guide html d0e4337 https jersey java net documentation latest user g
  • 关于游戏循环、tick和实时编程的一些问题

    首先 我想为我的英语水平道歉 因为我是法国人 我目前正在使用 LWJGL 用 java 制作实时游戏 我有一些关于游戏循环的问题 我正在线程中运行渲染例程 这是不是一个好主意 通常 渲染例程相当慢 并且不应该减慢更重要的世界更新 滴答 例程
  • Xcode 3.1.4 中添加 -Wall 和 -Wextra 的位置

    我试图找出在 Xcode 中添加额外警告标志的位置 例如 Wall 和 Wextra 我在 Leopard 上使用版本 3 1 4 苹果的文档适用于旧版本 如果我按照他们的说明进行操作 它会将我带到与他们显示的完全不同的窗口 他们还提供了特
  • Highcharts - 指定堆叠时间序列的顺序

    Highcharts 有没有办法指定时间序列的堆叠顺序 我发现的唯一方法是在系列出现时订购它们 因此 如果我有 A B 和 C 系列 并且希望通过以下方式订购 B C A然后我将系列添加到B C A顺序使得系列 0 B 系列 1 C 系列
  • 如何从 scala/sbt/slf4j 项目中排除公共日志记录?

    我的 scala sbt 项目使用 grizzled slf4j 和 logback 第三方依赖项使用 Apache Commons Logging 对于 Java Maven 我将使用 jcl over slf4j 和 logback c
  • Android XML:投影被截断

    我有一个带有边距的相对布局和一个嵌套在该布局内的浮动操作按钮
  • 如何正确处理 ASP.Net Core 3 Web API 中的多个端点

    我有 2 种方法来处理 HTTP GET 请求 第一个方法用于int键入输入 另一个用于string类型输入 GET api Fighters 5 HttpGet id public async Task
  • 如果我在 MySQL 中存储 int(255) ,最大数量是多少?

    我在mysql中使用int 255 作为我的id 这够长吗 如果我有大约 1 000 000 条记录 谢谢 有些东西可能只是将其转换为int 11 为你 因为你不能在一个字符中包含 255 个可见数字int 最大值将为2147483647
  • 在 asp.net mvc 2.0 中使用 Html.DropDownListFor 助手时如何更改 id 值?

    我有这样的部分观点 现在您可以创建新产品并编辑现有产品 编辑和创建都使用相同的形式 加载时创建位于主页上 编辑会在 jQuery UI 模型对话框中弹出并呈现新的部分视图 因此 就页面而言 我有两个具有相同 id 的下拉框 这很糟糕 因为它
  • 向下滚动到页面图像时是否能够部分加载页面图像,或者只是效果?

    我在一些网站上注意到 例如http mashable com http mashable com当您打开页面并尝试滚动它时 它似乎在您到达它时加载图像 我不知道这是否只是闪烁效果 或者它确实是为了减少滚动到它之前的图像负载 这是一个帮助您入
  • Hbase-hadoop集成中datanode、regionserver的作用

    根据我的理解 行被插入到 HBase 表中 并作为区域存储在不同的区域服务器中 因此 区域服务器存储数据 类似地 就 Hadoop 而言 数据存储在 hadoop 集群中的数据节点中 假设我在 Hadoop 1 1 1 之上配置了 HBas
  • 仅当安装支持 Android 应用程序时 HTML 重定向到自定义协议

    我想让所有用于我的应用程序的 URI 启动我的应用程序 如果已安装 如果未安装 我想显示有关我的应用程序的网页 看了下面两个问题 还是找不到靠谱的解决办法 意图过滤器适用于 Google 但不适用于 Chrome 和 Facebook ht
  • Flask jsonify 在新行上打印结果

    第一次使用 Flask 我创建了一个非常基本的应用程序 我正在尝试打印推荐系统的结果 第一组代码来自我的 python 函数 print most similar 正在创建一个格式化字符串 希望在新行上打印每个 REC 代码的第二部分显然是
  • 如何将不同的输入放入 sklearn Pipeline 中?

    我正在使用 sklearn 的 Pipeline 对文本进行分类 在此示例管道中 我有一个 TfIDF 矢量器和一些用 FeatureUnion 包装的自定义功能和分类器作为管道步骤 然后我拟合训练数据并进行预测 from sklearn
  • LUA_MULTRET 未按预期工作

    This is almost的副本这个问题 https stackoverflow com questions 12528820 lual dostring puts nothing on the stack 但是 答案表明并不能解决我的问
  • 如何在单元测试中模拟JPA存储库的find方法

    我正在尝试 UT 我的小项目 但遇到了问题 我的应用程序使用简单的分层架构 我不能碰巧UT服务层 事实上我想嘲笑班级Crud存储库 https docs spring io spring data commons docs current