如何在 Java 中 Mock Lambda 表达式?2024 年 9 月 10 日 | 阅读 3 分钟 Lambda 表达式是运行时定义的匿名函数,这使得在 Java 中 Mock 它们变得困难。但是,通过 Mockito 或 PowerMock 等几种强大的 Mocking 框架的帮助,在 Java 中 Mock Lambda 表达式并有效地测试它们是可行的。在本文中,我们将使用最受欢迎的 Java Mocking 框架之一 Mockito 来探讨如何 Mock Lambda 表达式。 Mockito 是一个流行的 Mocking 框架,它允许您创建伪对象并在单元测试中使用它们来检查代码的行为。Mockito 最强大的功能之一是能够 Mock 函数式接口,即使是具有单个抽象方法的接口,如 Runnable、Callable 或 Comparator。Lambda 表达式也可以被 Mock,因为它们也是函数式接口。 以下是一个在 Java 中使用 Mockito Mock Lambda 表达式的示例: LambaMockingTestExpl.java 上面的代码将不会产生任何输出,因为它只包含一个 Mocked Runnable 对象,其中包含一个 Lambda 表达式,该表达式在执行时只会打印一条消息。通过调用 Mocked Runnable 对象的 run() 方法来执行 Lambda 表达式。 但是,Lambda 表达式的执行输出(“Lambda 表达式已执行。”)不会打印到控制台,因为 Lambda 表达式不包含任何输出到控制台的代码。 在此示例中,我们使用 Mockito 来 Mock 一个 Runnable 接口。Lambda 表达式的行为是使用 doAnswer 方法定义的。在这种情况下,消息被打印到控制台,并返回 null。之后,我们使用 run 函数实际运行 Lambda 表达式,并使用 verify 方法确保它确实被执行了。 使用 Mockito,以下示例显示了如何 Mock 带有参数的 Lambda 表达式: LambdaMockingTestExpl.java 此代码的输出将不可见,因为它仅包含测试用例而没有打印任何输出的代码。但是,当使用 JUnit 等测试框架执行此测试用例时,框架将根据测试用例中的断言来报告测试是通过还是失败。 在这种情况下,测试用例正在测试 Mock Comparator 对象是否正确执行了用于不区分大小写地比较两个字符串的 Lambda 表达式。verify 语句检查 compare 方法是否使用参数“Hello”和“world”调用,assertEquals 语句检查返回结果是否为 0,这表示两个字符串在不区分大小写比较时相等。如果两个断言都通过,测试将通过,否则将失败。 在此示例中,Mockito 被用来 Mock 一个 Comparator 接口。为了定义带有参数的 Lambda 表达式的行为,我们使用 when 方法。在这种情况下,我们正在比较两个字符串而不考虑大小写。然后使用 compare 方法和两个输入“Hello”和“world”运行 Lambda 表达式,并使用 verify 方法确认其正确执行。 总之,有效地测试 Java 中的 Lambda 表达式可能会很困难,但在 Mockito 等强大的 Mocking 框架的帮助下是可以实现的。通过使用 doAnswer 和 when 方法,您可以控制 Lambda 表达式的行为并确保它们使用正确的参数运行。阅读本文的示例后,您应该能够自信地 Mock Lambda 表达式,同时高效地评估您的代码。 |
字符串的回文分割意味着将给定字符串分成若干部分,使得从给定字符串形成的所有子字符串本身都是回文。在 Java 的回文分割问题中,我们返回使每个部分都成为回文所需的最小分割次数...
7 分钟阅读
什么是 BFS?广度优先搜索 (BFS) 是遍历或搜索树或图数据结构的基本算法。通过将每个节点的邻居添加到从根节点开始的遍历队列中。图的 BFS 与树的 BFS 类似,...
阅读 6 分钟
问题如下:给定一个整数序列,您需要找出序列中缺失的最小正整数。序列中也可能包含重复的元素,以及负数,甚至……
5 分钟阅读
Java 是最流行的编程语言之一。Java 提供了丰富的库集,其标准的 Java 库非常强大,包含 java.lang、java.util 和 java.math 等库。除了标准库,Java 还提供了数千个库。有些...
5 分钟阅读
在 Java 中,public 和 private 是关键字,被称为访问修饰符或说明符。它限制了类、构造函数、变量、方法和数据成员的作用域或可访问性。这取决于它应用的对象。Java 提供了四种类型的访问...
阅读 6 分钟
比较两个或多个 Excel 工作簿是常见的需求,尤其是在自动化测试场景中。在本节中,我们将学习如何比较两个 Excel 工作簿,或者验证两个工作簿是否具有相同的数据集。比较 Excel 文件我们不应该从比较 Excel 工作表开始...
阅读 6 分钟
字节数组是用于存储二进制数据的基本数据结构,使其成为各种任务的通用工具。一种常见的用例是将图像存储在字节数组中。在本节中,我们将探讨如何将字节数组转换为...
阅读 6 分钟
矩阵遍历是计算问题解决中常见的难题,与路径查找、模拟和游戏有关。网络上讨论的一个此类问题是“腐烂的橙子问题”,它模拟了橙子网格上腐烂的传播。这是一个理论上的...
7 分钟阅读
在面向对象编程的世界中,不变性概念因其在代码稳定性和可预测性方面的优势而经常被强调。然而,在某些情况下,可变类起着至关重要的作用,提供了灵活性和修改对象状态的能力。在 Java 中,一个...
阅读 4 分钟
自动售货机已成为我们日常生活不可或缺的一部分,它们提供了一种方便的方式来获取各种零食和饮料。在其看似简单的功能背后,是一个复杂的软件设计,可确保顺畅的用户交互和库存管理。在本节中,我们将...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India