使用 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));
}
}