Eclipse IDE 中 Mockito 和 JUnit 的示例

2025年3月17日 | 阅读 7 分钟

在这里,我们将结合 Mockito 框架和 JUnit 框架。 我们也可以使用 Spring Boot 来代替 JUnit 框架。

JUnit 是 Java 程序员用于创建测试用例的测试框架之一。 与 Mockito 一样,JUnit 也是一个开源测试框架。 要深入了解 JUnit 框架的概念,请点击链接:junit-tutorial。

1. Stubbing 示例

在此示例中,我们将使用 stubs 测试一个简单的模块。 以下是创建测试示例的步骤

目录结构

Examples of Mockito and JUnit in Eclipse IDE

步骤 1: 添加应用程序所需的 Maven 依赖项。 依赖项始终添加到应用程序的 pom.xml 文件中。 在此示例中,您需要添加两个依赖项

  1. JUnit 依赖
  2. Mockito 依赖

步骤 2: 创建一个名为 ToDoService.java 的接口,其中包含一个未实现的方法,如下所示。

ToDoService.java

步骤 3: 创建一个名为 ToDoBusiness.java 的 Java 类,其中包含一个参数化构造函数和一个方法,如下所示。

ToDoBusiness.java

步骤 4: 在测试的源文件夹 (src/test/java) 中创建一个名为 ToDoServiceStub.java 的 stub 类,用于测试目的。

ToDoServiceStub.java

步骤 5: 创建另一个名为 ToDoBusinessStub.java 的 stub,如下所示。

ToDoBusinessStub.java

输出

以下输出显示 stub 工作正常。

Examples of Mockito and JUnit in Eclipse IDE
Examples of Mockito and JUnit in Eclipse IDE

Stubbing 的缺点

在上面的示例中,ToDoBusinessStub 依赖于 ToDoService 接口,因此我们创建了一个名为 ToDoServiceStub 的 stub,它返回虚拟值。 ToDoServiceStub 只是一个真实的 Java 类。 使用 stubs 会有很多维护问题。 例如,如果我们要向 ToDoService 接口添加新方法或从中删除现有方法,我们需要跟踪与此接口相关的 stub。 stubs 的另一个问题是使代码更加复杂的动态条件。

Stubs 在简单项目和场景中很有用,但在复杂场景中,我们需要比 stubs 更动态的东西。 为了克服这些缺点,出现了 mocks 来代替 stubs。

在上面的示例中,我们尚未使用 Mockito 框架,因为我们已经创建了一个简单的模块进行测试。 现在,我们将创建一个 mocking 的示例。 在创建 mocking 示例之前,我们应该了解将在示例中使用的一些重要概念和方法。

2. Mocking 示例

在这里,我们将创建一个 mock 对象的示例。 以下步骤用于创建使用 Mockito 和 JUnit 进行测试的示例。

步骤 1: 创建一个名为 ToDoService 的接口,其中包含一个未实现的方法。

ToDoService.java

步骤 2: 现在,为 ToDoService 接口创建一个名为 ToDoBusiness 的实现类。

ToDoBusiness.java

步骤 3: 创建一个名为 ToDoBusinessMock 的 JUnit 测试用例来进行单元测试。

ToDoBusinessMock.java

输出

以下输出显示测试正在成功运行。 它还显示对象在列表中可用,即 "Use Hibernate."

Examples of Mockito and JUnit in Eclipse IDE

3. Mocking List 类的示例

在这里,我们将创建一个 Mocking List 类 (java.util.List) 的示例。

步骤 1: 创建一个名为 TestList 的 mock 测试类,用于测试 List 类。

TestList.java

输出

以下输出显示测试正在成功运行,并且列表中有一个可用的项目。 它还显示了对象的值。

Examples of Mockito and JUnit in Eclipse IDE

4. List 的多个返回值示例

在这里,我们将创建一个使用多个返回值来模拟 List 类 (java.util.List) 的示例。 在上一个示例中,列表仅返回一个对象(因为它仅包含一个对象),而在以下示例中,它返回多个值(因为它包含三个项目)。

步骤 1: 创建一个名为 TestList 的 JUnit 测试用例,用于测试 List 类。

TestList.java

输出

以下输出显示测试正在使用 List 的多个返回值成功运行。

Examples of Mockito and JUnit in Eclipse IDE

5. Mocking List.get() 方法的示例

在此示例中,我们将 mocking List.get() 方法。 要使用 get() 方法,我们需要在其中传递一个值(数字),如示例所示。

步骤 1: 创建一个名为 TestList 的测试类,用于 mocking List.get() 方法。

TestList.java

输出

以下输出显示当列表的索引值为 0 时,测试成功运行,并且它返回给定的字符串,即 Mockito。

Examples of Mockito and JUnit in Eclipse IDE

但是,如果我们想检查 assertEquals("Mockito", mocklist.get(1)),测试将会失败并抛出错误,如下所示。

Examples of Mockito and JUnit in Eclipse IDE

当调用 mocklist.get() 方法时,它始终返回 Mockito 。为了避免这种情况,参数匹配器应运而生。借助参数匹配器,我们可以获取任何整数的值,无论它是否被 stubbed。

6. verify() 方法的示例

在这里,我们将创建一个使用 Mockito 的 verify() 方法进行测试的示例。

步骤 1:创建一个名为 ToDoService 的接口,其中包含两个未实现的方法。

ToDoService.java

步骤 2: 创建一个名为 ToDoBusiness 的实现类,并删除与 "Hibernate" 无关的 todos(List 的对象)。

ToDoBusiness.java

步骤 3: 创建一个名为 ToDoBusinessMock 的 mock 类,并验证指定的方法 (deleteTodosNotRelatedToHibernate()) 是否被调用。

ToDoBusinessMock.java

输出

以下输出显示测试正在成功运行。 因此,它表明所有方法都已得到很好的验证。

Mockito verify() method

如果您想要一个永远不应被调用或删除的项目,可以使用方法 never() 来执行此操作。例如

通过使用方法 times(),您可以指定调用特定方法的次数。例如

同样,您可以将 Mockito 的其他方法(例如 atLeastOnce()、atLeast() 和 atMost())与 verify() 一起使用。

7. Mockito spy() 的示例

让我们创建一个名为 SpyTest 的测试类,用于测试目的。

SpyTest.java

在上面的代码中,我们创建了 ArrayList 类的 spy 并检查了其大小。 列表的大小为零,这意味着列表为空。 检查列表大小后,我们在列表中添加了一个项目(“Mockito”)。 现在,正如我们所讨论的,由于 spy 创建了真实对象的 partial mock,因此大小增加了一个。

输出

Mockito spy method

除了想要更改行为的内容外,spy() 方法让真实的动作继续发生。 这意味着 spy() 方法允许我们跟踪真实对象正在发生的事情,并允许我们覆盖特定行为。


下一主题参数匹配器