单元测试-junit5高级MockitoExtension

发布于:2025-09-12 ⋅ 阅读:(17) ⋅ 点赞:(0)

使用 MockitoExtension 进行单元测试

MockitoExtension 是 Mockito 框架提供的一个 JUnit 5 扩展,用于简化 Mockito 在测试中的使用。通过注解驱动的方式,可以自动初始化 Mock 对象并注入到测试类中。

@ExtendWith(MockitoExtension.class)
public class ExampleTest {
    @Mock
    private Dependency dependency;

    @Test
    public void testMethod() {
        when(dependency.someMethod()).thenReturn("mocked result");
        assertEquals("mocked result", dependency.someMethod());
    }
}

启用 MockitoExtension

在测试类上添加 @ExtendWith(MockitoExtension.class) 注解即可启用 Mockito 扩展。这是 JUnit 5 的标准方式,不需要额外的配置。

@ExtendWith(MockitoExtension.class)
public class ServiceTest {
    // 测试代码
}

创建 Mock 对象

使用 @Mock 注解可以快速创建 Mock 对象。MockitoExtension 会自动处理这些对象的初始化和注入。

@ExtendWith(MockitoExtension.class)
public class ServiceTest {
    @Mock
    private Repository repository;

    @Test
    public void testFindById() {
        when(repository.findById(anyLong())).thenReturn(Optional.of(new Entity()));
        // 测试逻辑
    }
}

注入 Mock 对象

@InjectMocks 注解用于将 Mock 对象自动注入到被测试的类中。Mockito 会尝试通过构造函数、setter 或字段注入的方式完成依赖注入。

@ExtendWith(MockitoExtension.class)
public class ServiceTest {
    @Mock
    private Repository repository;

    @InjectMocks
    private Service service;

    @Test
    public void testServiceMethod() {
        when(repository.findAll()).thenReturn(List.of(new Entity()));
        assertFalse(service.getAll().isEmpty());
    }
}

参数化测试支持

MockitoExtension 可以与 JUnit 5 的参数化测试一起使用,为每个测试用例提供不同的 Mock 行为。

@ExtendWith(MockitoExtension.class)
class ParameterizedTest {
    @Mock
    private Calculator calculator;

    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3})
    void testAdd(int input) {
        when(calculator.add(anyInt(), anyInt())).thenReturn(input * 2);
        assertEquals(input * 2, calculator.add(input, input));
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到