CodeGym/Java 课程/模块 3/使用 Mockito 进行高级测试

使用 Mockito 进行高级测试

可用

1.1 Mockito 库

今天我们将熟悉高级测试。更具体地说,使用Mockito库。甚至不要考虑离开这个行业。

首先,这个库是Spring测试中的一个标准。这实际上是 Java 后端开发行业的标准。

其次,您必须为 Spring 代码编写测试了解您编写的后端是否正常工作的唯一方法是调用其 API 的方法。进行测试比不进行测试要容易 10 倍。你会亲眼看到的。

pom.xml您可以使用以下代码将 Mockito 库添加到您的库中:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

Mockito 项目的完整源代码可以在GitHub上找到。

1.2 模拟对象

那么这个 Mockito 是什么,为什么这么好?

在开发和开发测试的过程中,经常需要将某种“存根”而不是真实对象插入代码中。

例如,与数据库一起工作的代码经过测试并在那里进行了一些更改。最好在每次测试之前该数据库的状态相同(否则测试将不同)。我希望基础更简单,以便快速回滚这些状态。

或者,例如,您正在测试发送有用 SMS 的代码。对于直邮,他使用某种付费短信网关。最好将一些虚拟网关放入其中以测试代码,以免向无法理解的人发送数百条 SMS。

或者您的代码正在从其他 Web 服务器请求数据,而这些数据在测试服务器上根本不可用。或者你写了一个在线支付的代码,需要测试50次,然后才允许在真正的金融渠道中使用。

我想你明白了...... 虚拟对象,或者因为它们也被称为存根对象,是一个非常有用的东西。

困难来了——Java 有静态类型。这意味着为了将对ReadDatabase对象的引用分配给变量而不是 类型的对象,您需要从VirtualDatabase继承类。VirtualDatabaseRealDatabase

然后发现这个类有RealDatabase一堆私有的方法和变量存储了对其他真实对象的引用,你不能这样写一个普通的存根。理论上是好的,但实际上是死胡同。

Java 5 中出现了救援(您可以阅读DynamicProxy更多详细信息)。它允许您创建编译器没有任何抱怨的虚拟对象。

此类虚拟对象称为模拟(来自模拟一词 - 布局)。Mockito 库能够将这些模拟的工作提升到前所未有的高度。因此,顺便说一句,图书馆的名字。

1.3 @ExtendWith 注解

Mockito 库与 JUnit 配合得很好,它甚至可以被认为是它的扩展。

有两种方法可以在单元测试中启用 Mockito 库。第一种方式是添加一个特殊的注解:

@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
    ...
}

第二种方法是通过调用方法启用它的工作openMocks()

public class MockitoAnnotationTest {
    @BeforeEach
    public void init() {
        MockitoAnnotations.openMocks(this);
   }
}

大多数情况下,您会看到第一个选项,但有时知道还有第二个选项会很有用。

评论
  • 受欢迎
你必须先登录才能发表评论
此页面还没有任何评论