返回

Spring Boot 单元测试(一)—— 用好 JUnit5,玩转单元测试

后端

  1. 前言

单元测试对于任何软件项目来说都是非常重要的,它可以帮助我们及时发现代码中的问题,并提高代码的质量。在 Spring Boot 中,我们可以使用 JUnit5 来进行单元测试。JUnit5 是一个非常强大的单元测试框架,它提供了许多有用的特性,例如:

  • 注解驱动的测试
  • 断言
  • 模拟
  • 参数化测试

2. 配置单元测试

在 Spring Boot 中,我们可以通过在项目中添加 spring-boot-starter-test 依赖来配置单元测试。这个依赖会自动为我们引入 JUnit5 和 Mockito 等必要的库。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

3. 编写单元测试

要编写一个单元测试,我们需要创建一个测试类,并使用 @RunWith(SpringRunner.class) 注解来指定要使用的单元测试框架。

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class)
@SpringBootTest
public class MyUnitTest {

    @Test
    public void testSomething() {
        // 这里编写测试代码
    }

}

在测试类中,我们可以使用 @Test 注解来标记测试方法。测试方法中,我们可以编写测试代码来验证我们的代码是否正常工作。

4. 使用 Mockito 模拟对象行为

在单元测试中,我们经常需要模拟对象的行为。我们可以使用 Mockito 来轻松地做到这一点。

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.boot.test.context.SpringBootTest;

@ExtendWith(MockitoExtension.class)
@SpringBootTest
public class MyUnitTest {

    @Mock
    private MyService myService;

    @Test
    public void testSomething() {
        // 这里编写测试代码
    }

}

在测试类中,我们可以使用 @Mock 注解来模拟对象行为。然后,我们就可以在测试方法中使用这个模拟对象来编写测试代码。

5. 运行单元测试

我们可以通过使用 mvn test 命令来运行单元测试。如果测试通过,我们将看到以下输出:

[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

如果测试失败,我们将看到以下输出:

[INFO] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[ERROR] MyUnitTest.testSomething()  Time elapsed: 0.001 s  <<< ERROR!
java.lang.AssertionError: expected:<1> but was:<2>

6. 总结

本文介绍了如何使用 JUnit5 进行单元测试,以及如何使用 Mockito 来模拟对象行为。希望这篇文章能够帮助您更好地编写单元测试。